Quels sont les avantages et les inconvénients des 2 lignes de code suivantes? Je ne comprends pas pourquoi il y a 2 façons différentes de faire la même chose.
this.listenTo(app.Todos, 'change:completed', this.filterOne);
app.Todos.on('change:completed', this.filterOne);
De plus, lorsque j'utilise .on, comment déterminer le contexte par défaut?
listenTo
est l'option la plus récente et la meilleure car ces écouteurs seront automatiquement supprimés pour vous pendant stopListening
qui est appelée lorsqu'une vue est supprimée (via remove()
). Avant listenTo
, il y avait un problème vraiment insidieux avec les vues fantômes qui traînaient éternellement (fuite de mémoire et inconduite), car les méthodes d'affichage étaient référencées comme écouteurs d'événements sur les modèles, même si les instances de vue elles-mêmes étaient depuis longtemps disparues et ne sont plus dans le DOM.
Si vous voulez lire l'histoire arrière pour listenTo
, recherchez listenTo
dans le référentiel github de backbone et lisez quelques-unes des discussions les plus longues sur les problèmes.
Quant au contexte par défaut, plusieurs choses peuvent finir liées à this
:
this.listenTo
, ce sera toujours l'instance de vue (signalée par Wim Leers dans les commentaires)this.listenTo
, l'histoire se complique foo.on
), Le backbone l'utilisera (c'est donc une approche plus robuste)function () {//your event handler}.bind(this)
, vous pouvez également contrôler manuellement le contexte (également recommandé)_.bind
Ou $.proxy
Sont des alternatives disponibles à l'ECMA function.bind
this.bindAll('onClick', ...)
assurera que l'instance de vue est le contexte this
lorsque des méthodes de vue sont utilisées comme gestionnaires d'événementsevents
standard de la vue seront automatiquement liés à l'instance de la vue par le réseau principal (il s'agit de ceintures et bretelles avec bindAll
)Donc, pour résumer en quelques lignes directrices:
events
autant que possible car elle est concise et correctethis.listenTo
pour toutes les liaisons aux modèles et collectionsFunction.bind
Car bon, les standards, mais il y a plusieurs bonnes options ici.Avec listenTo
, l'objet dont vous souhaitez écouter les événements est passé comme premier argument. Dans le cas de on
, il s'agit en fait d'une méthode sur cet objet.
Les avantages de listenTo
sur on
sont:
L'auditeur garde une trace de tous les gestionnaires d'événements, ce qui facilite leur suppression en une fois en cas de besoin.
Le contexte du rappel est toujours défini sur l'auditeur lui-même.