您可以创建一个简单的模型来保存应用程序状态,不需要任何花哨的东西,只需要一包实现常用 Backbone 事件方法的数据:
var AppState = Backbone.Model.extend({});
var app_state = new AppState();
然后,流派列表视图将监听点击事件(正如您已经拥有的那样),并在有人更改时在应用程序状态模型上设置当前流派:
var Genres = Backbone.View.extend({
//...
choose: function(ev) {
// This would be the click handler for the genre,
// `.html()` is just for demonstration purposes, you'd
// probably use a data attribute in real life.
app_state.set({genre: $(ev.target).html() });
},
});
个别流派的视图会听取"change:genre"
应用程序状态模型上的事件并随着类型的变化做出反应:
var Genre = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'change_genre');
app_state.on('change:genre', this.change_genre);
},
//...
change_genre: function() {
// Refill the genre display...
}
});
Demo: http://jsfiddle.net/ambiguously/mwBKm/1/
您可以为您想要的任何数据创建模型,并且模型是在 Backbone 中处理数据事件的便捷方式。作为一个额外的好处,这种方法使得持久化应用程序的状态变得相当容易:只需将通常的 Backbone 持久化支持添加到AppState
然后你就走吧。
如果您只需要一个简单的事件总线来推送非数据事件,您可以使用 Backbone 的Events构建简单事件聚合器的方法:
app.events = _.extend({}, Backbone.Events);
然后,假设您有一个全局app
命名空间,你可以这样说:
app.events.on('some-event', some_function);
and
app.events.trigger('some-event', arg1, arg2, ...);