2009-07-10 7 views
0

J'ai travaillé avec un gestionnaire d'événements dans Javascript et j'ai récemment décidé de migrer de Prototype vers jQuery. J'ai déjà rencontré quelques problèmes en utilisant Prototype, mais j'ai trouvé quelques solutions de contournement qui au moins ont résolu les problèmes, mais qui ne me semblaient pas très agréables. Maintenant, je suis en train de tout réécrire, j'aimerais que tout se passe tout de suite. Si possible, j'aimerais connaître votre avis sur les «meilleures pratiques» concernant ce problème.Gestion correcte des événements à l'aide de jQuery

Courte description: J'ai construit un prototype 'objectList', qui vous permet de sélectionner un élément (qui, à son tour, met en mouvement d'autres choses). Pour rendre la vie plus facile, il utilise un 'searchList' (un autre prototype que j'ai écrit) qui vous permet de faire un filtrage de recherche incrémental et un tri en direct sur les éléments listés. La liste de recherche est un membre de la liste d'objets, comme visible dans le code ci-dessous. Si un élément est cliqué, la liste de recherche déclenche un événement (personnalisé) auquel la liste d'objets doit alors répondre. En ce moment, j'utilise cette approche:

var self = this; 
$(this.searchList).bind('objectSelected', function() { 
    self.selectObject(self.searchList.getSelectedId()); 
}); 

Dans Prototype, j'utilisé pour bind() le rappel à this, de sorte que je serais en mesure d'accéder à la même this à partir de là (Controlling the value of 'this' in a jQuery event). Cependant, jQuery ne semble pas avoir de support de liaison de portée native, et probablement pour une raison. Le 'self -approach' fonctionne, mais je me demandais si cela est considéré comme un 'bon code', ou si c'est probablement un mauvais présage de programme.

De plus, je parfois l'habitude de faire le rappel d'un membre de l'objet 'parent', comme celui-ci (note: Prototype-syntaxe):

init: function() { 
    var self = this; 
    this.searchList.observe('objectWasSelected', this.objectSelected.bind(this)); 
} 

objectSelected: function() { 
    this.selectObject(this.searchList.getSelectedId()); 
} 

mais après y avoir réfléchi, il semblait superdumb. Donc, question centrale: est ma nouvelle approche (code le plus élevé, en utilisant self) vraiment mieux, et plus important encore, y a-t-il encore un mieux un? Je cherche toujours à améliorer mes compétences, en particulier en ce qui concerne la conception d'un bon programme, donc si quelqu'un pouvait faire la lumière sur ce sujet, je serais très reconnaissant!

Répondre

0

Self est la manière standard de faire ce que vous voulez. Notez que la possibilité de définir un contexte différent apparaîtra dans la prochaine version de jQuery voir here

Questions connexes