Backbone récupère le rappel de la bonne façon
Ma colonne vertébrale application dispose d'une vue appelée annexeje suis un peu confus au sujet de la différence de l'appel de la fonction appropriée sur la réussite et l'erreur, je me suis essayé à la fois de remorquage possible énumérés ci-dessous, mais je n'avais pas quelle est la différence et qu'est-ce que le droit d'appeler une fonction de routeur placé en vue de l'extérieur:
Le premier moyen:
require([
'app/collections/schedule',
'app/views/schedule'
], function(ScheduleCollection, ScheduleView) {
var scheduleCollection = new ScheduleCollection(),
scheduleView = new ScheduleView({
model: scheduleCollection
});
scheduleCollection.fetch({
reset: true,
success: function(){
scheduleView.successHandler();
},
error: function(){
scheduleView.errorHandler()
}
});
});
La deuxième façon
require([
'app/collections/schedule',
'app/views/schedule'
], function(ScheduleCollection, ScheduleView) {
var scheduleCollection = new ScheduleCollection(),
scheduleView = new ScheduleView({
model: scheduleCollection
});
scheduleCollection.fetch({
reset: true,
success: scheduleView.successHandler(),
error: scheduleView.errorHandler()
});
});
dans le scheduleView
successHandler: function(){
console.log('success');
}
erroHandler: function(){
console.log('error');
}
source d'informationauteur ahmedsaber111
Vous devez vous connecter pour publier un commentaire.
Il y a une autre option: plutôt que de référencer les points de vue directement, fournir la collection comme une référence à l'concernés points de vue et écouter les événements pertinents. Par exemple, écouter de nouveau sur la collection de la vue. Si ce n'est pas l'événement que vous souhaitez raccorder, puis déclencher un événement personnalisé de la réussite ou de l'erreur de rappels que votre vue peut écouter.
Voici un exemple de manipulation de réinitialisation de prolonger votre ScheduleView:
voici un exemple de personnalisation des événements liés à la réussite/gestionnaires d'erreur à partir de la collection:
L'avantage de câblage de cette manière est que vous retirez la dépendance de la collection est sur le point de vue. C'est particulièrement essentielle si vous voulez plus d'une vue à écouter les événements qui se passe sur votre collection (ou les modèles de la collection) et plus faiblement couplé pour l'architecture de votre épine Dorsale de l'application.
La première voie est correcte, la seconde est incorrect. Mais de cette façon pourrait être plus concis:
(Bien que ... de l'OP, la fonction
scheduleView.successHandler
n'existe pas, de sorte que pourrait être un problème.)La raison pour laquelle le deuxième ne fonctionne pas, c'est que vous avez besoin pour passer un référence à une fonction plutôt que de l'exécuter immédiatement.
Code corrigé:
Maintenant, si vous souhaitez obtenir des avancées, à l'aide de la jQuery promesse de l'API hors de le retour de l'objet XHR est supérieure dans tous les sens et les rappels ne devrait jamais être nécessaire plus.
La différence est que vous obtenez une promesse de retour qui peut être transmise... mais c'est un sujet pour un autre post. (Shameless plug) découvrez adamterlson.com pour ma série en trois parties sur des promesses....
Ce que vous devez faire est d'attribuer la fonction de l'objet de la "réussite" et "erreur" et non pas la valeur de retour de la fonction.
Lorsque vous faites:
elle renvoie un objet de fonction et donc
success: function(){...}
est juste, mais si
et vous ne
a()
il exécute la fonction et renvoie la valeur de retour et doncsuccess: a()
est mal, maissuccess: a
est droit.