有没有办法阻止骨干路由器?

时间:2013-09-23 07:53:59

标签: backbone.js marionette backbone-routing

是否可以关闭或停止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路由器。

2 个答案:

答案 0 :(得分:2)

截至目前,答案是

Derick Bailey在Backbone的回购中打开了这个问题,建议对骨干结构进行一些修改以支持这种改变:https://github.com/jashkenas/backbone/pull/1630

随后讨论了这种改变的优点,其中提出了以下观点:

  

开始 - 我担心我不理解这里的前提。有一些路由的公理与这个补丁相矛盾:

     

存在路由器以将URL与应用程序中的位置匹配。

     

网址的重点在于它们始终可以访问 - 一旦有了URL,您就可以随时返回它(将其加入书签,粘贴到浏览器中)。

我还查看了Backbone源代码,并没有迹象表明我正在考虑的功能是可能的。

答案 1 :(得分:1)

我很好奇你为什么不在木偶中使用AppRouter?它应该解决你将路由分成较小的AppRoute对象的问题......

有关构建大型应用的一些截屏视频,请查看BackboneRails。它不仅与使用rails作为后端的开发人员相关。它提供了一种在模块中布局应用程序结构的好方法(每个模块都有自己的应用程序路径)。非常值得推荐。