2014-04-30 2 views
1

J'ai connecté l'événement window.onbeforeunload et la méthode Marionette.AppRouter.navigate pour détecter la navigation d'une page et exécuter du code avant de naviguer.Bouton de retour dans Marionette (onbeforeunload ne fonctionne pas)

Ces crochets se déclenchent lors de la fermeture de la page ou de la navigation, sauf en cas de navigation par bouton Précédent ou Suivant (Chrome).

Je peux gérer l'événement d'itinéraire et détecter le dos/bouton vers l'avant est invoquée:

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

Mais je veux être en mesure de le faire avant que la navigation; extension execute devrait me laisser faire cela, mais qu'il ne soit pas invoqué:

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

Répondre

2

Transforme ce qui a fonctionné était de remplacer le Backbone.Router, puis ajouter une logique pour exécuter conditionnellement la ligne avec 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; 
    }, 
    }); 

Apparaît que les boutons de navigation avant/arrière sont gérés par Backbone.Router où d'autres navigations sont gérées via Marionette.AppRouter.

Questions connexes