1

我正在构建一个 Marionette 应用程序,只是被路线冲突所困扰。作为 Backbone 的新手,我不确定是否可以为 Marionette 的AppRouter. 到目前为止,我看到的最好的线索是:

  • 实现默认路由
    • 我不相信这会解决我的问题,因为这些应用程序位于两个单独的模块中。
  • 将基于正则表达式的路由集成为Marionette.AppRouter.
    • 这并没有让我觉得可能是最简单的事情。

在我布局正在发生的事情之前,这里有一些上下文:

users_app.js.coffee:

@Gdit.module "UsersApp", (UsersApp, App, Backbone, Marionette, $, _) ->

  class UsersApp.Router extends Marionette.AppRouter
    appRoutes:
      'users/:id/edit': 'editUser'
      'users/:id': 'showUser'

  API =
    showUser: (id) ->
      new UsersApp.Show.Controller
        id: id

    editUser: (id) ->
      new UsersApp.Edit.Controller
        id: id

  App.addInitializer ->
    new UsersApp.Router
      controller: API

role_app.js.coffee:

@Gdit.module "RolesApp", (RolesApp, App, Backbone, Marionette, $, _) ->

  class RolesApp.Router extends Marionette.AppRouter
    appRoutes:
      'users/roles': 'editUsersRoles'

  API =
    editUsersRoles: ->
      new RolesApp.Edit.Controller

  App.addInitializer ->
    new RolesApp.Router
      controller: API

当我尝试访问Roles.Edit.Controllerthrough时出现问题/#users/roles

Started GET "/users/roles" for 127.0.0.1 at 2013-08-16 14:02:01 -0400
Processing by UsersController#show as JSON
  Parameters: {"id"=>"roles"}

如您所见,“角色”正在被/users/:id路由捕获并被处理为id. 不是我所期望的:)

最后,由于我提到了“可能的最简单的事情”,我承认这实际上就是改变 to 的editUsersRoles路线/users_roles。但是,我更想知道是否存在更优雅的解决方案并看到一些尖峰等。

4

1 回答 1

2

据我了解,Backbone 在第一个匹配 URL 的路由模式处停止。因此,如果您addInitializer()首先为您的角色路由器运行,它将首先在匹配 URL 时破解。

也就是说,该角色路由器的设置似乎可能会导致维护问题(或至少是混乱)。/roles让 Roles 路由器匹配,/roles/:userId等(甚至/users_roles如您提到的)会更自然。

于 2013-08-16T21:25:55.560 回答