我通常设置的方式是大量使用Backbone.Events;我倾向于通过将这些事件绑定到视图中的方法来拦截视图中的点击事件。反过来,该绑定事件将执行一些特定于视图的工作,然后将执行类似的操作this.trigger("Router_SomeEvent")
- 指定该事件的绑定,通常是在路由器中创建视图的位置,如下所示:
// Begin router snippet...
someRouteMethod: function() {
this.views.SomeViewInstance = new MyViews.SomeViewClass();
this.views.SomeViewInstance.bind("Router_SomeEvent", this.onSomeEvent);
},
onSomeEvent: function() {
this.navigate("NewLocation", { trigger: true });
}
// End router snippet
使用这种发布/订阅 (pub/sub)模式,您的代码变得更加解耦,并且更易于处理和扩展。一开始有点混乱,但是一旦你掌握了它,就会越来越清楚它为什么有用。我倾向于让我的路由器处理所有......好吧......路由,而我的视图只包含渲染逻辑、事件绑定到 UI 以及必要时将事件冒泡到路由器。您还可以将事件绑定到您的模型;我倾向于使用与视图类似的模型,因为它们会通知我的路由器一些更改,并且路由器将继续通过更改视图状态、更改其他模型或集合等来处理该事件。
Backbone 非常强大,但是需要相当长的时间来学习。我推荐 Addy Osmani 的Backbone Fundamentals;他还有一本关于 O'Reilly 的书,非常值得一读。