根据我的理解,差异是AppRouter
上的事件的回调函数应该存在于Controller
中,而不是相同的Router对象。此外,AppRouter和App之间存在一对一的关系。控制器,我所有来自路由器的代码现在转移到控制器,我没有看到太多的意义吗?那么为什么要用呢?我肯定错过了什么?
答案 0 :(得分:13)
我看待它的方式是分开关注点:
所以基本上,如果你在你的应用程序的起始页面上,它应该可以正常工作而不需要任何路由器:你的动作(例如点击一个菜单项)只是触发各种控制器动作。
然后,在路由器上添加“如果调用此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/(“AHA!”关于Router.Navigate的第二个论点的时刻“)
我在Marionette的书的免费预览中也详细介绍了这个话题。请参见此处的第32-46页:http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf
答案 1 :(得分: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();
}