是否可以关闭或停止Backbone Router收听其定义的路由?
我问,因为我一直在测试Backbone SubRoute(https://github.com/ModelN/backbone.subroute),设置一个有很多空间的应用程序,用户可以运行很多子应用程序。
因此,我已经定义了一个主路由器,subrouter结构遵循粗略:
MainRouter = Backbone.Router.extend
routes:
"":"root"
"spaces/:id/:module(/*subroute)":"invokeModule"
root: () ->
console.log "root trigger"
invokeModule: (id, module, subroute) ->
that = this
GigaApp.module(module).start({nested_root: "spaces/#{id}/#{module}"})
SubAppRouter = Backbone.SubRoute.extend
routes:
"":"app_home"
app_home: () ->
console.log 'at sub app home'
SubApp.on "start", (options) ->
SubApp.router = new SubAppRouter(options.nested_root)
此通用结构从第一次为空间初始化子应用程序时起作用,因为MainRouter启动SubApp,后者使用正确的嵌套路由初始化其路由器。随后,SubAppRouter中定义的其他路由也会触发罚款。
但是,如果您导航到不同的空间(具有不同的id),并导航回第一个空间,则此结构会中断,因为已为该空间初始化的SubAppRouter会覆盖MainRouter,并且不会调用SubApp的启动来自MainRouter。
所以,我想知道是否有办法停止或禁用取消绑定路由触发Backbone路由器。
答案 0 :(得分:2)
截至目前,答案是否
Derick Bailey在Backbone的回购中打开了这个问题,建议对骨干结构进行一些修改以支持这种改变:https://github.com/jashkenas/backbone/pull/1630
随后讨论了这种改变的优点,其中提出了以下观点:
开始 - 我担心我不理解这里的前提。有一些路由的公理与这个补丁相矛盾:
存在路由器以将URL与应用程序中的位置匹配。
网址的重点在于它们始终可以访问 - 一旦有了URL,您就可以随时返回它(将其加入书签,粘贴到浏览器中)。
我还查看了Backbone源代码,并没有迹象表明我正在考虑的功能是可能的。
答案 1 :(得分:1)
我很好奇你为什么不在木偶中使用AppRouter?它应该解决你将路由分成较小的AppRoute对象的问题......
有关构建大型应用的一些截屏视频,请查看BackboneRails。它不仅与使用rails作为后端的开发人员相关。它提供了一种在模块中布局应用程序结构的好方法(每个模块都有自己的应用程序路径)。非常值得推荐。