Pourquoi dois-je utiliser Underscore.js _.méthode de liaison pour Backbone.js les événements personnalisés?
var DocumentEventsView = Backbone.View.extend({
initialize : function () {
$(document).on('visibilitychange', _.bind(this.onVisibilityChange, this));
},
onVisibilityChange : function () {
console.log('inside onVisibilityChange');
}
});
Alors pourquoi ne peux pas je viens de faire $(document).('visibilitychange', 'onVisibilityChange' ?
Je sais que la méthode de liaison est de conserver et de transmettre le contexte de la méthode, mais je n'ai pas de soins sur le contexte, je ne suis jamais à l'aide de cette onVisibilityChange. Pourquoi $(document).('visibilitychange', 'onVisibilityChange" ne fonctionne pas?
ensuite, vous n'avez pas besoin de le faire. Si vous n'avez pas besoin de contexte, vous n'avez pas besoin de les lier. Mais alors, est-il besoin d'être une méthode de vue?
Il ne fonctionne pas si je ne suis pas à l'engager et, où placeriez-vous le gestionnaire d'événement?
Il ne fonctionne pas si je ne suis pas à l'engager et, où placeriez-vous le gestionnaire d'événement?
OriginalL'auteur | 2013-10-24
Vous devez vous connecter pour publier un commentaire.
De cette façon, le
this
objet à l'intérieur deonVisibilityChange
sera votre point de vue de l'objet.Si vous n'en avez pas besoin, alors n'utilisez pas
_.bind
. Le seul problème est que vous devez être très prudent lorsque, plus tard, vous changez d'avis et d'utiliserthis
à l'intérieur deonVisibilityChange
: vous aurez une bonne chance d'oublier quethis
ne fait pas référence à l'objet d'affichage, et d'introduire une certaine divertissant un bug dans votre code.Ici est un exemple de travail, avec et sans
_.bind
:De sortie:
J'ai utilisé
click
etdblclick
événements pour des raisons de simplicité. La sortie est écrite à la console, appuyez sur la touche F12. Testé dans le dernier Chrome.TypeError: 'undefined' est pas une fonction (evaluationg '((x.de l'événement.spécial[o.origType]||{})de la poignée|du|o.gestionnaire).appliquer(j'.elem.a)")
Cela fonctionne pour moi:
$(document).on('visibilitychange', this.onVisibilityChange);
Ah oui, j'ai été faire "onVisibilityChange', au lieu de cela.onVisibilityChange. Je pensais que cela a fonctionné comme des événements où vous pourriez juste donner la méthode à l'intérieur ".
OriginalL'auteur kol
Si vous utilisez la colonne vertébrale, vous ne devriez pas la peine de l'utilisation de jQuery. Essayez ceci:
C'est la méthode par défaut de la colonne vertébrale pour écouter des événements indépendamment de ce que votre point de vue est (ou el). En fait, il travaille sur des Modèles aussi bien qu'ils s'étendent à partir de l'Événement.
Vous avez raison, désolé.
En fait, tant pis, il ne fonctionne pas :/. Et il est logique, sur quels éléments êtes-vous à la liaison de la visibilityChange événement?
OriginalL'auteur EmptyArsenal
Si vous ne voulez pas utiliser de _.lier ensuite de ne pas l'utiliser, et si vous avez des problèmes à résoudre d'une autre manière.
Ce _.lier n'est tout simplement enrouler fonction à une autre fonction, dans cette fonction suffit d'appeler la fonction originale avec de contexte spécifié.
Modifier :
$('selector').on('event',func)
appelle la fonction avec le contexte de $('selector')[0] (élément du DOM).OriginalL'auteur KiT O