Backbone:处理所有模型通用变量的最佳方式
Backbone: Best way to handle variable common to all models
我目前正在开发我的第一个 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 });
}
});
我所有其他 Collections 的结构都像 GlobalComplexity
。
解决这个问题最干净的方法是什么?
非常感谢。
定义一个全局参数管理器。导出实例(单例),然后在需要时引用它。
在 "globalupdate" 上更新 parametersManager 然后为所有 model/collections 触发 "update" 这样他们就会查看 parametersManager 中的当前参数。
我目前正在开发我的第一个 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 });
}
});
我所有其他 Collections 的结构都像 GlobalComplexity
。
解决这个问题最干净的方法是什么?
非常感谢。
定义一个全局参数管理器。导出实例(单例),然后在需要时引用它。
在 "globalupdate" 上更新 parametersManager 然后为所有 model/collections 触发 "update" 这样他们就会查看 parametersManager 中的当前参数。