Backbone:处理所有模型共有变量的最佳方法

时间:2015-06-19 04:44:18

标签: javascript backbone.js mvvm

我目前正在开发我的第一个Backbone单页应用项目,我正面临一个问题。

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

现在我处理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

解决这个问题的最简洁方法是什么?

非常感谢。

1 个答案:

答案 0 :(得分:0)

定义全局parametersManager。导出实例(单例)然后在需要时需要它。

On" globalupdate"你更新参数管理器然后触发"更新"对于您的所有模型/集合,他们将查看parametersManager中的当前参数。