2013-08-16 13 views
1

我正在構建一個木偶應用程序,剛剛通過路線碰撞獲得了 位。作爲Backbone的新手,我不確定 是否有可能爲 Marionette的AppRouter創建{黑色,白色}列表。目前爲止我看到的最好的線索有:木偶應用程序之間的路線衝突。可能想法/解決方案?

  • 執行Default route
    • 我不相信這會解決我的問題,因爲這些應用程序分爲兩個單獨的模塊。
  • 集成regex-based routing作爲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 

roles_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.Controller到時出現問題:

Started GET "https://stackoverflow.com/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。不是我所期望的:)

最後,由於我提到了「最簡單的事情可能」的工作,我承認這實際上只是將editUsersRoles的路線更改爲/users_roles。不過,我更加好奇看看是否存在更優雅的解決方案,並看到一些尖峯等。

回答

2

據我所知,骨幹停止在與URL匹配的第一個路由模式。因此,如果您首先爲您的Roles路由器運行addInitializer(),那麼它將首先匹配URL。

也就是說,該角色路由器的設置似乎可能導致維護問題(或至少混淆)。讓角色路由器匹配/roles,/roles/:userId等(如上所述,甚至/users_roles)會更自然。

+0

您的維護問題是一個很好的問題,但是您看到這種方法爲習慣於觀看慣用的木偶代碼的人創建了什麼樣的混淆? –

+0

我在考慮這種問題,在代碼庫擴展後幾年後出現。第一次(或者剛剛第一次)進來的人可能會被這種路線衝突引發一點點。不是因爲它特別複雜,而是因爲它似乎沒有一個好的理由就躲避傳統。我的觀點是,消除驚喜可以是一件好事:)。 – ajk