骨干>多个路由器和History.start(Backbone > Multiple Rout

2019-09-17 10:15发布

我想有多个路由器生活模块在一个页面上。 我初始化对路由器$(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()被调用。

Answer 1:

你只需要调用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-应用-与骨干和骨干,提线木偶/



Answer 2:

您可能还可以检查Backbone.History.started ...

    var Router = Backbone.Router.extend({
        routes: {
            '': 'load'
        },
        initialize: function () {

        },
        load: function () {

        }
    });

    $(function () {
        new Router();
        if (!Backbone.History.started) {
            Backbone.history.start();
        }
    });

它是在拉要求最近增加。

确保并检查了德里克的木偶插件为好,这是相当真棒。



文章来源: Backbone > Multiple Routers and History.start
标签: backbone.js