3

モジュール化のために、複数のルーターを1つのページに配置したいと思います。ルーターを$(document).ready()別のjsファイルで初期化します。History.start()ルーターを初期化した直後に呼び出すことができたために正常に機能したルーターが1つしかなかったが、異なるファイルから初期化できるルーターが複数あるため、いつ呼び出すかがわかりません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()doc ready呼び出しがブロックされているとは思わないので、呼び出されるまでにすべてのルーターが初期化されていない可能性がある競合状態が発生することはありませんHistory.start()

4

2 に答える 2

8

アプリで1回だけ呼び出す必要があり、呼び出すBackbone.history.start()ときの唯一の基準は、少なくとも1つのルーターがすでにインスタンス化されている必要があるということです。

したがって、これを簡単に行うことができます。


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


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


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

私は定期的にルーターで同様のことを行っています。ページが読み込まれ、ユーザーがページを操作してからかなり経ってから、新しいルーターを起動することがよくあります。

ただし、FWIWは、Backbone.Marionetteプラグインにあり、このブログ投稿の一部として文書化されている初期化子のアイデアに興味があるかもしれません:http: //lostechies.com/derickbailey/2011/12/16/composite-javascript-アプリケーション-バックボーンとバックボーン-マリオネット/

于 2012-05-23T02:57:51.990 に答える
0

あなたもチェックできるかもしれませんBackbone.History.started...

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

        },
        load: function () {

        }
    });

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

最近、プルリクエストで追加されました。

DerickのMarionetteプラグインもチェックしてください。かなり素晴らしいです。

于 2012-05-23T03:17:36.970 に答える