我正在开发一个包含条目列表的主干应用程序,非常类似于示例应用程序Todos (http://documentcloud.github.com/backbone/examples/todos/index.html)。
因此,我有一个App视图和每个列表项的视图。现在,假设我有一个全局编辑按钮。App视图将处理一次单击,然后我想要做的是告诉每个列表视图显示一个删除按钮。
在下面的屏幕截图中(来自Spotify),按下编辑按钮将导致所有列表视图更改外观。
用Backbone做这件事的最佳方式是什么?我需要遍历所有列表视图并调用一个editMode函数。但是App视图(开箱即用)并不知道列表视图。

发布于 2011-09-20 21:41:14
不久前,我写了一篇关于在视图之间协调的几种不同选项的文章:http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/
在您的情况下,我建议使用我在那篇文章中描述的事件聚合器。你可以让每个项目视图监听一个"editmode“事件,或者类似的事件。当此事件激发时,侦听此事件的每个视图都会更新自身以进入编辑模式。然后,当你点击“完成”的时候,你会做相反的事情--发送一个“视图模式”事件,或者类似的东西,并让每个视图适当地更新自己。
发布于 2011-09-24 04:18:51
我的两点意见:你可以用backbone.js做一个简单的"hack“,实际上拥有一个可以在视图之间通信的发布/订阅:
以下内容(未经测试):
var EventBus = Backbone.Model.extend({
publish: function(event, args){
this.trigger(event, args);
},
subscribe: function(event, args) {
this.bind(event, args);
}
});你基本上就明白了。现在,对于每个视图,让它“绑定”到这个EventBus (因为视图只能绑定到backbone中的模型/集合)-你基本上只是使用方法名称publish/subscribe来与这样一个模型的命名同步,但你可以选择不这样做。在这种情况下,只需创建一个空的EventBus“类”,并将每个视图绑定到它:)
因此,每个视图只需要耦合到这个EventBus,并对接收到的事件执行操作!Backbone.js在内部处理此设计模式的所有工作,因此您几乎可以免费获得它:)
上面的代码可能不会按原样运行,但是否可以让您对此有所了解……
https://stackoverflow.com/questions/7485657
复制相似问题