【问题标题】:Is there a way to stop a Backbone Router?有没有办法停止骨干路由器?
【发布时间】:2013-09-23 07:53:58
【问题描述】:

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

我问是因为我一直在测试 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。

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

【问题讨论】:

    标签: backbone.js marionette backbone-routing


    【解决方案1】:

    截至目前,答案是否

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗨,雅各布。感谢您的回复,我会试用 AppRouter,除了我第一次学习/尝试 Marionette 之外,我没有理由不使用它。
      • 很公平 =) - 如果我能以任何方式帮助您,请告诉我。这是一个很棒的库,我真的建议在 BackboneRails 上观看截屏视频。对我帮助很大,它为您提供了一种构建应用程序的方法。
      • 谢谢,这周我会抽时间看他们。 AppRouter 是在 Marionette 应用程序中运行路由的一种很好的 DRYer 方式(看起来),因为它消除了对仅用于调用单个控制器操作的多个路由器操作的需要。但是,我仍然认为我需要一些嵌套路由 - 让子应用路由器监听他们的路由,同时忽略路由的基本“spaces/:id”段。不过我会继续评估 AppRouter,也许我把事情复杂化了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2019-11-16
      相关资源
      最近更新 更多