我目前正在將Marionette集成到現有的Backbone應用程序中。Marionette.js appRouter未在應用程序啓動時觸發
我有一個現有的Backbone路由器,但我試圖實現一個Marionette.AppRouter取代它的位置。問題是,在新的Marionette路由器應該拾取的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
直接,木偶路由器不火,因爲它應該。
但是,如果我加載頁面:http://mysamplesite.com/#!/123
,然後導航到http://mysamplesite.com/#!/123/page
,則Marionette路由器會正確觸發。有任何想法嗎?
是的,我有'Backbone.history.start'調用。我試着在示例代碼塊的開始處調用它,在示例代碼塊之後,我剛剛在示例代碼塊的末尾嘗試了您的方法,但無濟於事。 'console.log('testLoadPage');'仍然不會觸發。感謝您的回覆,但問題仍然存在。 – CREO 2013-03-07 17:37:13
我也注意到您的回覆中的修復不會觸發。我添加的代碼:'TestApp.on( 「初始化:後」,函數(){ \t \t \t如果(Backbone.history){ \t \t \t \t的console.log( 'startingHistoryAgain') \t \t \t \t骨幹.history.start(); \t \t \t}其他( \t \t \t \t的console.log( '未再次啓動') \t \t \t) \t \t});'既不是,也不是被解僱。 @Derick Bailey – CREO 2013-03-07 18:21:11
請確保在調用TestApp.start();' – 2013-03-08 03:32:54