2011-04-25 1 views
1

J'essaye d'assigner un gestionnaire d'événement à une classe que j'ai créée dans Mootools mais je n'arrive pas à accéder aux variables que j'ai créées pour la classe. Comme si:Confusion sur l'utilisation de Mootools et le mot clé 'This'

var newPerson = new Class({ 
initialize: function(name) 
{ 
    this.firstName = name; 
    //-------Creating Div----------// 
       ........... 
    //--------Created Div----------// 
    $(this.newDiv.id).click(function() 
    { 
     alert("clicked"); 
    }; 
}; 

Maintenant, quand je change la fonction d'alerter les objets nom attribué alert(this.firstName); il ne marche pas y avoir accès et je ne peux pas comprendre pourquoi.

Quelqu'un pourrait-il pointer mon dans la bonne direction.

Merci.

+1

vous semblez utiliser un mélange impair de mootools + jquery. votre classe est mootools mais les événements dom sont jquery. semble sale - vous devriez coller au code de mootools dans la classe si possible. Si les classes sont tout ce que vous utilisez pour mootools, alors saisissez http://www.moo4q.com/ - classes mootools pour jquery. La réponse de pointy pour garder une référence fonctionnera bien. Si vous voulez pointer l'événement click vers une méthode de classe (nettoyeur), alors vous pouvez 'this.newdiv.addEvent (" click ", this.handleClick.bind (this))' dans les mootools natifs. –

Répondre

2

En haut de la fonction "initialiser", ajoutez une variable:

var thisObj = this; 

Maintenant, dans votre gestionnaire, vous devriez être en mesure de le faire:

alert(thisObj.firstName); 

Par stashing this comme il se tenait lorsque la fonction "initialiser" a commencé, vous fournissez un moyen pour le gestionnaire "clic" pour obtenir à l'objet original. Dans le gestionnaire, this fera référence à l'élément DOM impliqué dans l'événement. (Je devine vraiment à ce sujet, parce que je ne suis pas vraiment familier avec MooTools.)

+1

c'est correct, la portée sera l'élément 'event.target', sauf si vous utilisez' function.bind() '- attention avec' $() 'renvoyant jquery tho. '$ (this.newDiv) .click (function() {...} .bind (this));' fonctionnera aussi bien. –

+0

@Dimitar - L'objet référencé par le mot clé 'this' n'est pas une portée, ce sont des choses entièrement différentes. – RobG

+0

oui, d'accord, c'est juste un pointeur d'objet de contexte qui sera probablement l'objet global (fenêtre), l'instance de classe ou un pointeur d'élément ici. puisque c'est une fonction, elle obtient une chaîne de portée dépendant du contexte et 'ceci 'n'est pas directement lié car les vars peuvent être dans la chaîne de portée qui n'ont rien à voir avec cela. à votre santé –

Questions connexes