如何初始化多个路由器?

时间:2016-12-19 09:34:55

标签: javascript backbone.js coffeescript backbone-routing

我在Routers中有两个资源:StudentsColleges

class App.Routers.Colleges extends Backbone.Router
  routes:
   "index": 'index'
class App.Routers.Students extends Backbone.Router
  routes:
   'index': 'index'
   'new': 'newStudent'

如何初始化这两条路线以便它们起作用?

我尝试像下面的代码一样进行初始化,但它无法正常工作。

window.App =
 Models: {}
 Collections: {}
 Views: {}
 Routers: {}
 initialize: ->
   new App.Routers.Students
   new App.Routers.Colleges
   Backbone.history.start()
 $(document).ready ->
   App.initialize()

当我尝试运行上面的代码时,它只显示了new App.Routers.Colleges中大学和学生div中的数据。

1 个答案:

答案 0 :(得分:1)

路由器中的路由被添加到全局Backbone.history对象中。所以任何相同的路线都会覆盖先前的路线。如果在之后定义,即使是不相同的路线也可能会覆盖类似但更具体的路线。

在实例化新路由器时,其构造函数调用_bindRoutes来解析从最后一个到第一个路由的路由,因此应首先定义特定路由,然后定义更通用的路由,以任何catch-all路由结束。

每个URL都必须是唯一的,因此您可以使用前缀命名每个路由器:

class App.Routers.Colleges extends Backbone.Router
  routes:
   'colleges': 'index'
class App.Routers.Students extends Backbone.Router
  routes:
   'students/new': 'newStudent'
   'students': 'index'

或者您可以使用(或制作自己的)子路由器/控制器。