2014-04-30 63 views
1

我已經掛鉤了window.onbeforeunload事件和Marionette.AppRouter.navigate方法,以檢測導航離開頁面並在導航前運行一些代碼。木偶中的回退按鈕(onbeforeunload不工作)

這些掛鉤會在關閉頁面或瀏覽時導致觸發,除非是後退或前進按鈕導航(Chrome)。

我可以處理路徑事件和檢測時,前進/後退按鈕調用:

Backbone.history.on('route', function(route, params) { 
    console.log('routing!'); 
    }); 

但我希望能夠導航之前做到這一點;延長execute應該讓我這樣做,但它不會被調用:

_.extend(Backbone.Router.prototype, { 
    execute: function(callback, args) { 
     if (callback) callback.apply(this, args); 
    } 
    }); 

回答

2

原來什麼工作是覆蓋Backbone.Router然後添加邏輯有條件地執行與callback.apply行:​​

_.extend(Backbone.Router.prototype, { 
    route: function(route, name, callback) { 
     var that = this; 
     if (!_.isRegExp(route)) route = this._routeToRegExp(route); 
     if (!callback) callback = this[name]; 
     Backbone.history.route(route, _.bind(function(fragment) { 
     var args = that._extractParameters(route, fragment); 
     if (myCustomLogic) { 
      callback && callback.apply(that, args); 
      that.trigger.apply(that, ['route:' + name].concat(args)); 
      that.trigger('route', name, args); 
      Backbone.history.trigger('route', that, name, args); 
     } 
     }, that)); 
     return that; 
    }, 
    }); 

顯示瀏覽器正向/反向按鈕正在通過Backbone.Router處理,其中其他導航通過Marionette.AppRouter進行處理。