現在、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ルーターは正しく起動します。何か案は?