请考虑以下 Backbone 应用程序结构:
AppView
Subview
FirstSubviewInQuestion
Subview
Subview
SecondSubviewInQuestion
应用程序视图创建并存储特殊项目的集合。在某个时间,第一个和第二个子视图需要访问该集合。现在将集合传递给他们的最佳方式是什么?
我自己看到了一些方法,但每种方法都有缺点:
1)不在App View内部创建该集合的实例,而是在全局范围内创建该集合的实例,然后将其作为依赖项传递(项目使用RequireJS;因此它将传递给AppView和两个子视图)。缺点:应用程序视图应该是应用程序中最顶层的元素。然而突然间,我们看到了一些漂浮在上面的集合实例。
2)或者我可以执行以下操作:
// some subview
var collection = {};
Backbone.trigger( "item:getSpecialItems", collection);
// now the collection has data
// app view
this.listenTo( "item:getSpecialItems", function(obj) {
// copy collection to passed object
_.extend(obj, this.specialCollection);
});
缺点:我们正在触发一个全球事件。我们知道只有应用程序视图会响应,但感觉就像一个糟糕的设计。另外,这种传递集合的方式似乎是一种 hack。
也许还有其他一些聪明的方法可以做到这一点?