我有一个名为Foo的Backbone视图,它有一个滚动条。当滚动条向某个方向移动时,我希望我的应用程序中的其他视图以各种方式更改。这些视图不嵌套在Foo中 - 它们是完全独立的并且是独立管理的。
我是否应该将对所有其他视图的引用传递给Foo的构造函数,以便它可以手动更新它们?或者我应该使用事件来通知滚动条移动的其他视图?如果是这样,Foo会触发什么对象,并由其他视图监听?
这些是纯粹的视觉变化,并没有支持它们的模型。
答案 0 :(得分:3)
我会在这种情况下使用事件
举个例子:
NavigationView = Backbone.View.extend({
initialize: function(options){
options.events.bind("navigation:change", this.changeNavigation);
this.render();
},
changeNavigation: function(key){
$('.menuItem', $(this.el)).removeClass("active");
$('.menuItem', $(this.el)).filter("." + key).addClass("active");
},
render: function(){
// rendering goes on here....
}
});
UserListView = Backbone.View.extend({
initialize: function(options){
options.events.trigger("navigation:change", "users");
this.render();
},
render: function() {
// rendering goes on here....
}
});
// kickstart the application
var myEvents = _.extend({}, Backbone.Events);
var myNavigation = new NavigationView({events: myEvents});
// this is just a collection of users... i left it out as it is not really the point here...
var users = new UserList();
var myUserList = new UserListView({collection: users, events: myEvents});
如果您需要更多信息,在引用1个视图到另一个视图或事件时,您还可以好好看看Derick Bailey撰写的这篇文章,他将上述方法解释为eventAggregator并列出了如何记录的文档示例使用它(和替代品)。 http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/