2012-09-18 3 views
0

J'essaie de déterminer à quelle fonction un événement .on de Backbone.js est lié. Par exemple, étant donné que j'ai vue avec:Déterminer par programme Backbone.js .on callbacks?

this.model.on('change', this.render, this); 

Je voudrais être en mesure de déterminer un programme que quand il y a un changement de modèle de la fonction render sera appelée.

J'ai regardé la source de Backbone.js et il semble que les liaisons sont stockées dans le ._callbacks. Dans ._callbacks, je peux déterminer l'événement auquel le modèle est lié. De l'exemple ci-dessus je peux déterminer que le modèle a l'événement de changement lié. Cependant, est-il possible de déterminer que le modèle est lié à la fonction de rendu de la vue? Pour ceux qui sont curieux, j'essaie d'étendre la fonction de rendu d'une vue, que je travaille actuellement. Toutefois, lorsque j'étend/réattribue la fonction de rendu, il interrompt les liaisons d'événements du modèle.

Merci!

Répondre

1

Il y a quelques approches à cela. Bien à vous devrait fonctionner, mais vous devrez désactiver la liaison de la vue normale et ajouter manuellement votre propre:

function renderMore() { 
    //do your pre-render code 
    view.render() 
    //do your post-render code 
} 
model.off('change', view.render); 
model.on('change', renderMore); 

Cependant, ceci est une odeur de code assez terrible d'encapsulation pauvre. Avez-vous pensé à sous-classer votre vue et à invoquer la méthode render de la classe parente au bon moment dans votre sous-classe?

Je faisais face à une situation où je voulais pouvoir rendre un dialogue à la fois comme une fenêtre pure sans éléments supplémentaires d'apparence et de toucher ainsi qu'avec un dialogue jquery modal avec une barre de titre, un bouton de fermeture, etc. classe responsable du rendu du contenu de base, puis j'ai eu des mixins que je pourrais ajouter pour gérer les variations jquery vs vanille.

Questions connexes