据我了解,不同之处在于 an 上的事件的回调函数AppRouter
应该存在于Controller
,而不是同一个 Router 对象中。此外,此类 AppRouter 和控制器之间存在一对一的关系,我所有来自 Router 的代码现在都移至 Controller,我看不出有太多意义吗?那么为什么要使用它们呢?我肯定错过了什么?
问问题
7842 次
2 回答
13
我看到它的方式是分离关注点:
- 控制器实际完成工作(组装数据、实例化视图、在区域中显示它们等),并且可以更新 URL 以反映应用程序的状态(例如显示的内容)
- 路由器只是根据地址栏中输入的 URL 触发控制器动作
所以基本上,如果您在应用程序的起始页面上,它应该可以正常工作而无需任何路由器:您的操作(例如单击菜单条目)只需触发各种控制器操作。
然后,您在路由器上添加“如果调用此 URL,则执行此控制器操作”。在您的控制器中,您可以使用 更新显示的 URL navigate("my_url_goes_here")
。注意你没有通过trigger: true
。
有关更多信息,请查看 Derick 的博客文章http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/(“啊哈!”关于 Router.Navigate 的第二个参数的时刻”)
我还在我关于木偶的书的免费预览中更详细地介绍了这个主题。请参阅此处的第 32-46 页:http: //samples.leanpub.com/marionette-gentle-introduction-sample.pdf
于 2013-05-16T07:47:35.123 回答
1
我为路由器做了一些覆盖。目前以这种方式使用它(如卓别林): https ://gist.github.com/vermilion1/5525972
appRoutes : {
// route : controller#method
'search' : 'search#search'
'*any' : 'common#notFound'
},
initialize : function () {
this.common = new Common();
this.search = new Search();
}
于 2013-05-16T07:31:36.000 回答