【问题标题】:Backbone: Best way to handle variable common to all modelsBackbone:处理所有模型通用变量的最佳方法
【发布时间】:2015-09-04 23:00:42
【问题描述】:

我目前正在开发我的第一个 Backbone 单页应用项目,但遇到了一个问题。

基本上我有一个作为视图实现的菜单(html select 输入元素)。它的值用于控制几乎所有其他数据请求,因为它指定了在其他视图中显示哪种数据。

现在我处理 DOM 事件并触发一个全局事件,以便每个模型都可以捕获它并在内部跟踪新值。这是因为在请求新数据时需要该值。但这看起来不是一个好的解决方案,因为 A) 我最终在每个模型中编写了相同的函数(事件处理程序),并且 B) 我得到了具有相同变量的多个模型。

var Metrics = Backbone.Collection.extend({
    url: "dummy-metrics.json",
    model: MetricsItem,

    initialize: function () {
        this.metric = undefined;
    },

    setMetric: function (metric) {
        this.metric = metric;
        globalEvents.trigger("metric:change", this.get(metric));
    }
});

var GlobalComplexity = Backbone.Collection.extend({
    url: function () {
        var url = "http://asd/global.json?metric=" + this.metric;
        return url;
    }, //"dummy-global.json",
    model: GlobalComplexyItem,

    initialize: function () {
        this.metric = undefined;

        this.listenTo(globalEvents, "metric:change", this.updateMetric);
    },

    updateMetric: function (metric) {
        this.metric = metric.get("id");
        this.fetch({ reset: true });
    }
});

我所有其他收藏的结构都类似于GlobalComplexity

解决这个问题最干净的方法是什么?

非常感谢。

【问题讨论】:

  • 能否请您添加一些代码 sn-p 以便我们轻松识别问题?

标签: javascript backbone.js mvvm


【解决方案1】:

定义一个全局参数管理器。导出一个实例(单例),然后在需要时使用它。

在“globalupdate”上,您更新parametersManager,然后为所有模型/集合触发“update”,以便他们查看parametersManager 中的当前参数。

【讨论】:

  • 所以基本上全局变量是我最好的选择?
  • 它似乎很合适,因为它是全球使用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2013-01-20
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多