我的应用程序中有多个路由器,通常看起来像这样:
// Start backbone.js
if (!Backbone.History.started) {
Backbone.history.start({pushState: true, hashChange: false});
}
// Perform some RPC requests ...
// Depending on user role, received from the server should be created suitable router:
var router;
if (typeof app.user.role === 'manager') {
router = new routers.manager();
} else {
router = new routers.guest();
}
问题是在页面加载并执行脚本后,路由器不会这样做。任何事物。他们不会自动加载当前 url 的路由。所以,我不得不以这种方式修复它(我不确定这是正确的方法):
routers.guest.initialize = routers.manager.initialize = function() {
var defaultRoute = 'default';
if (typeof this.routes[Backbone.history.fragment] !== 'undefined') {
this[this.routes[Backbone.history.fragment]]();
} else {
this.navigate(defaultRoute, true);
}
};
它工作正常,除了一个错误:例如,当我使用带参数的路由时/reset-password-confirm/:code
- 它无法在routes
属性中找到。我可以编写更多代码来修复它,但我想我做错了,如果我必须编写这样的东西 - 据我所知,路由器应该在它创建后处理路由。
所以,问题:
为什么我的路由器在创建后不处理当前 url 的路由?也许我需要稍后开始骨干历史?(但这个错误稍后会再次发生)
如何使用参数制作路线,比如
/user/:id
在那里工作?也许重新创建路由器是个坏主意?也许一次创建所有这些会更好?
PS我尝试创建两个路由器并保留它们,我也尝试在创建所有路由器后调用主干历史记录启动方法..但这没有帮助:/