Dans mon projet Backbone.js, j'ai un modèle et plusieurs vues. Toutes les vues ont enregistré callbacks pour 'change:currentTextTitle'
sur ce modèle:N'appelez pas render() si la vue elle-même a été mise à jour Modèle via Backbone.Model.set()
// 'this' stands for any of the Views here
myModel.on('change:currentTextTitle', this.render, this);
Maintenant, un utilisateur effectue une action, ce qui provoque la vue spécifique de changer son champ « titre actuel texte ». Cette vue spécifique appelle ensuite myModel.set("currentTextField", newTextValue)
qui à son tour déclenche l'événement 'change:currentTextTitle'
appelant tous les affichages (y compris celui dont set() est originaire). Puis tous les affichages appellent leurs fonctions de rappel render
.
Le problème est que la méthode render
est également appelée sur la vue à partir de laquelle la méthode set() a été appelée à l'origine, ce qui est complètement inutile car elle est déjà mise à jour avec currentTextTitle
.
Comment mes vues appeler myModel.set() d'une manière que les autres les callbacks de Vues s'informer, mais sans déclencher/appeler lui-même « Voir source »?
Une solution semble être de passer la vue source dans le cadre du paramètre options
de la méthode set()
(qui obtient transmis à trigger()
puis le long de la callback render()
):
myModel.set("currentTextField", newTextValue, thisViewSetAttribute)
Puis, dans la Rappel render
on pourrait vérifier si thisViewSetAttribute != this
. Cependant, au lieu d'implémenter des contrôles dans chaque rappel, je pense qu'il serait plus logique de gérer cela dans le modèle en appelant seulement les callbacks nécessaires et en ignorant la vue source à partir de laquelle l'appel à la méthode set() est apparu. Est-ce possible?