我想有多个路由器生活模块在一个页面上。 我初始化对路由器$(document).ready()
在不同的js文件。 当我有工作得很好,因为我可以打电话只是一个路由器History.start()
初始化路由器之后,但现在我已经能够从不同的文件,我不知道什么时候调用初始化多个路由器History.start()
例如:
<script src="router1.js" type="text/javascript"></script>
<script src="router2.js" type="text/javascript"></script>
在router1.js:
$(document).ready(function(){
new Core.Routers.Router1()
});
且同样ROUTER2。
是最好的解决办法只是增加一个新$(document).ready()
调用History.start()
在页面的结束? 我不认为文档准备呼叫被阻塞,因此不认为引入中所有路由器都可能没有被初始化时间的竞争条件History.start()
被调用。
你只需要调用Backbone.history.start()
曾经在您的应用程序和唯一标准,当你把它叫做是,至少有一个路由器必须是已经实例化。
所以,你可以很容易地做到这一点:
$(function(){
new MyRouter();
Backbone.history.start();
});
$(function(){
new AnotherRouter();
});
$(function(){
new AndMoreRouters();
});
我做路由器类似的事情定期,我经常启动该页面已经被加载后不久新的路由器和用户与网页互动。
FWIW不过,你可能会感兴趣的,我有我的Backbone.Marionette插件初始化的想法和记录的这个博客帖子的一部分: http://lostechies.com/derickbailey/2011/12/16/composite-javascript-应用-与骨干和骨干,提线木偶/
您可能还可以检查Backbone.History.started
...
var Router = Backbone.Router.extend({
routes: {
'': 'load'
},
initialize: function () {
},
load: function () {
}
});
$(function () {
new Router();
if (!Backbone.History.started) {
Backbone.history.start();
}
});
它是在拉要求最近增加。
确保并检查了德里克的木偶插件为好,这是相当真棒。