Le contrôle de la valeur de 'cette' jQuery événement
J'ai créé un "contrôle" à l'aide de jQuery et utilisé jQuery.étendre afin de vous aider dans ce que OO que possible.
Lors de l'initialisation de mon contrôle, j'fil de divers événements de clic comme
jQuery('#available input',
this.controlDiv).bind('click', this, this.availableCategoryClick);
Avis que je suis pasing 'ce' que les données de l'argument dans la méthode de liaison. Je fais ce que je puisse obtenir des données attachées à l'instance de contrôle plutôt de l'élément qui déclenche l'événement click.
Cela fonctionne parfaitement, cependant je soupçonne qu'il ya une meilleure façon
D'avoir utilisé le Prototype dans le passé, je me souviens d'une liaison de syntaxe qui vous a permis de contrôler que la valeur de " il " était dans l'événement.
Qu'est-ce que le jQuery façon?
- Je ne sais pas pourquoi vous essayez de faire jQuery OO comme jQuery est plus fonctionnelle que OO.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
jQuery.proxy()
avec fonction anonyme, juste un peu bizarre que le "contexte" est le deuxième paramètre.J'aime votre façon, en fait, l'utilisation d'une construction similaire:
et la première ligne de ce.onClick:
J'aime cette façon parce que vous obtenez à la fois l'élément cliqué (ce) et le "il" de l'objet que l'auto sans avoir à utiliser des fermetures.
jQuery a la
jQuery.proxy
méthode (disponible depuis la 1.4).Exemple:
Je ne pense pas que jQuery a une fonctionnalité intégrée pour que. Mais vous pouvez utiliser un helper de construction comme les suivantes:
De cette façon, vous pouvez créer des dynamiques "fonctions wrapper" avec createDelegate() que l'appel à la méthode à un objet donné son " ce " champ d'application.
Exemple:
jQuery.proxy()
encore (paru dans v. 1.4, janvier 2010). Pas besoin de downvote.HTML 5-compatible navigateurs proposent un méthode bind sur
Function.prototype
qui est probablement le plus propre de la syntaxe et n'est pas cadre-dépendante, même si elle n'est pas intégrée dans IE jusqu'à ce que IE 9. (Il y a un polyfill pour les navigateurs sans elle, si.)Basé sur votre exemple, vous pouvez l'utiliser comme ceci:
(note de côté: la première
bind
dans cette déclaration fait partie de jQuery et n'a rien à voir avecFunction.prototype.bind
)Ou à utiliser un peu plus concis et à jour de jQuery (et d'éviter toute confusion à partir de deux différents types de
bind
s):vous pouvez utiliser le javascript lier méthode comme ceci:
jQuery ne prend pas en charge les lie et le meilleur moyen est d'utiliser des fonctions.
Parce qu'en Javascript, ce.availableCategoryClick ne signifie pas l'appel de la availableCategoryClick la fonction de cet objet, jQuery vous conseillons d'utiliser cette syntaxe préférée:
Concepts OO en Javascript sont difficiles à comprendre, de la programmation fonctionnelle est souvent plus facile et plus lisible.
De voir que les fonctions de modifications de l'étendue, de la façon la plus commune est de le faire à la main, avec quelque chose comme
var self = this
.