2

現在、Marionetteを既存のBackboneアプリケーションに統合しています。

既存のバックボーンルーターを設置していますが、代わりにMarionette.AppRouterを実装しようとしています。問題は、新しいマリオネットルーターが取得する必要があるURLの「ハードリフレッシュ」では、起動しないことです。別のページに移動してから、ハードリフレッシュで起動しなかったURLに戻ると、正しく起動します。別のページに移動して再び戻った、なぜそれが機能するのか理解できません。これが私のコードサンプルです:

TestApp = new Backbone.Marionette.Application();
    var testAppController = {
        testLoadPage: function(){
            console.log('testLoadPage Fired'); //<---- DOES NOT FIRE ON HARD REFRESH
        }
    };
    TestAppRouter = Backbone.Marionette.AppRouter.extend({          
        appRoutes: {
            "!/:var/page": "testLoadPage",
            "!/:var/page/*path": "testLoadPage"
        },
        controller: testAppController,
        route: function(route, name, callback) {
            return Backbone.Router.prototype.route.call(this, route, name, function() {
                if (!callback) callback = this[name];
                this.preRoute();
                this.trigger.apply(this, ['beforeroute:' + name].concat(_.toArray(arguments)));
                callback.apply(this, arguments);
            });
        },
        preRoute: function() {
            app.showLoader(name, arguments);
        }
    });
    TestApp.addRegions({
        contentContainer: '#container'
    });
    TestApp.addInitializer(function(options){
        new TestAppRouter();
    });
    TestApp.start();

ページを直接ロードhttp://mysamplesite.com/#!/123/pageすると、Marionetteルーターが正常に起動しません。

ただし、ページを読み込んでhttp://mysamplesite.com/#!/123からに移動するhttp://mysamplesite.com/#!/123/pageと、Marionetteルーターは正しく起動します。何か案は?

4

1 に答える 1

7

Backbone.history.start()ルーターインスタンスを作成した後に電話をかけましたか?そうでない場合は、それを行う必要があります。これがアプリで呼び出されるまでルーターは実行されません。また、少なくとも1つのルートがインスタンス化されるまで、これを呼び出すことはできません。私は通常これを行います:


TestApp.on("initialize:after", function(){
  if (Backbone.history){ Backbone.history.start(); }
});

hth

于 2013-03-07T04:07:50.180 に答える