Backbone> Multiple Routers and History.start

Phi*_*hoa 3 backbone.js

我希望在一个页面上有多个路由器以实现模块化.我$(document).ready()在不同的js文件中初始化路由器.当我只有一台路由器工作正常,因为我可以History.start()在初始化路由器后立即调用,但现在我有多个路由器可以从不同的文件初始化,我不知道什么时候打电话History.start().

例如:

<script src="router1.js" type="text/javascript"></script>
<script src="router2.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

在router1.js中:

$(document).ready(function(){
  new Core.Routers.Router1()
});
Run Code Online (Sandbox Code Playgroud)

同样适用于router2.

最好的解决方案只是在页面末尾添加一个新的$(document).ready()调用History.start()吗?我不认为doc ready调用是阻塞的,因此不会引入竞争条件,其中所有路由器可能尚未History.start()被调用时被初始化.

Der*_*ley 8

您只需要Backbone.history.start()在应用程序中调用一次,并且调用它时的唯一标准是至少必须实例化一个路由器.

所以,你可以轻松地做到这一点:


$(function(){
  new MyRouter();
  Backbone.history.start();
});


$(function(){
  new AnotherRouter();
});


$(function(){
  new AndMoreRouters();
});
Run Code Online (Sandbox Code Playgroud)

我定期对路由器做类似的事情,并且我经常在页面加载并且用户正在与页面交互之后很久就启动新的路由器.

FWIW,你可能对我在Backbone.Marionette插件中的初始化器的想法感兴趣,并记录在这篇博文中:http://lostechies.com/derickbailey/2011/12/16/composite-javascript-应用-与骨干和骨干,提线木偶/