2

是否可以关闭或阻止骨干路由器监听其定义的路由?

我问是因为我一直在测试 Backbone SubRoute ( https://github.com/ModelN/backbone.subroute ),设置一个有很多空间的应用程序,用户可以在其中运行许多子应用程序。

因此,我定义了一个主路由器、子路由器结构,如下所示:

   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,并且没有调用从 MainRouter 启动 SubApp .

所以,我想知道是否有办法停止或禁用取消绑定主干路由器的路由触发。

4

2 回答 2

2

截至目前,答案是否定的

Derick Bailey 在 Backbone 的 repo 上打开了这个问题,建议对主干的结构进行一些更改以支持这种更改:https ://github.com/jashkenas/backbone/pull/1630

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

开始 - 恐怕我不明白这里的前提。有几个路由公理与这个补丁相矛盾:

路由器的存在是为了将 URL 与应用程序中的位置相匹配。

URL 的全部意义在于它们始终是可访问的——一旦你有了一个 URL,你就可以在任何时候返回它(将其添加为书签,将其粘贴到浏览器中)。

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

于 2013-09-24T08:41:23.913 回答
1

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

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

于 2013-09-23T09:06:55.757 回答