我使用Backbone的「全部」事件來捕獲我應用中的所有路由事件,以便記錄頁面視圖。只要我不使用navigate
來手動觸發路線,這很好。 在以下示例中,我將用戶從dashboard
路由轉發到login
路由。骨幹觸發事件執行路線後回調,導致下面的輸出:使用導航時由Backbone.Router觸發的事件順序
showDashboard
showLogin
route:showLogin
tracking:/login
route:showDashboard
tracking:/login
顯然,這不是我想要的。我知道我可以撥打showLogin
而不是使用navigate
來觸發登錄路由,這就是我現在正在做的事情,但我想知道爲什麼事件的順序與觸發的回調的順序不同。
這裏是我的路由器(縮短):
var AppRouter = Backbone.Router.extend({
routes: {
"/login": "showLogin",
"": "showDashboard",
},
initialize: function() {
return this.on('all', this.trackPageview);
},
trackPageview: function(eventName) {
console.log(eventName);
var url = Backbone.history.getFragment();
console.log('tracking: ' + url);
},
showDashboard: function() {
console.log('showDashboard');
// check if the user is logged in etc.
this.navigate('#/login', { trigger: true });
},
showLogin: function() {
console.log('showLogin');
}
});