2016-05-04 2 views
0

Dans mon projet backbone.js, j'ai besoin d'une méthode qui ne déclenche que lorsque window.location.hash change. J'ai trouvé une solution de rechange pour mon problème comme here.Comment utiliser l'événement "hashchange" dans les délégués de l'événement backbone.js?

Aussi, je peux résoudre ce problème en créant un événement à mon avis fédérateur initialize function comme ci-dessous

Backbone.View.extend({ 
    initialize() { 
     $(window).on('hashchange',()=> { 
      console.log('yes hashchange events works') 
     }); 
    } 

Mais je cherche une solution qui utilise backbone.js'seventDelegates ou listenTo

Merci à l'avance

Répondre

2

Vous pouvez utiliser Backbone.history pour cette étendue.

Histoire sert de routeur global (par image) pour gérer hashchange événements ou pushState, correspondre à la voie appropriée, et déclencher callbacks. Vous ne devriez jamais avoir à en créer un vous-même puisque Backbone.history en contient déjà un.

Parce qu'il déclenche un rappel, vous pouvez écouter hashchange événements:

Backbone.history.on("all", function (route, router) { 
    console.log(window.location.hash); 
}); 

ou

Backbone.history.on("route", function() { 
    console.log(window.location.hash); 
}); 
+0

merci beaucoup. Cela fait les trucs :) –

+1

cela n'a pas fonctionné pour moi malheureusement, parce que l'option 'hashChange' est définie sur' false' pour Backbone.history, mais cette solution de contournement a fait l'affaire: ' window.addEventListener (' hashchange ' , this.handleHashChange); ' – RZ87

0

Essayez ceci pour initialiser la fonction:

window.addEventListener('hashchange', function { 
    var currentHash = location.hash; 

    console.log('currentHash', currentHash); 
})