2009-09-04 8 views
1

Je travaille sur un objet Javascript qui contient des objets YUI. L'élément clé est que mon objet doit contenir son propre jeu d'onglets YUI afin que je puisse afficher plusieurs instances de mon objet sur la même page et que les onglets contrôlent leur propre instance d'objet.Objets imbriqués avec YUI et Javascript

Je l'ai mis en place comme suit:

var Scheduler = function(divid,startDate,mode){ 

    this.tabView = null; 
    ... 

    this.init = function(){ 
    this.tabView.appendTo(this.calendar_cell); 

    this.tabView.addTab(new YAHOO.widget.Tab({ 
     label: 'Day', 
     content:'<div id="'+ this.calendar_day_div +'" style="width:100%; height:auto;"></div>' 
    })); 

    var tab0 = this.tabView.getTab(0); 
    tab0.addListener('click', this.showWeek); 

    } 

    this.showWeek(){ 
    alert(this); 
    } 

}); 

est ici le problème. Je m'attendrais à l'alerte (ceci); dans this.showWeek pour alerter l'instance du planificateur. Au lieu de cela, il me donne l'onglet li. J'ai essayé d'alerter this.parent et on me donne 'indéfini' comme réponse.

Comment dois-je configurer ceci pour faire ce que je dois faire?

Répondre

1

La méthode addListenter prend un argument de portée. Donc, vous pouvez changer votre appel à ce qui suit pour résoudre votre problème (puisque vous utilisez YUI):

tab0.addListener('click', this.showWeek, undefined, this); 
+0

Merci beaucoup. Travaillé comme un charme. –

+0

Vous êtes les bienvenus. – seth

0

Lorsque vous attachez une fonction à un événement d'un objet (dans ce cas l'objet détenu par tab0), c'est généralement cet objet qui devient le contexte this de la fonction lors de son exécution.

Adjust votre code comme ceci: -

var self = this; 
this.showWeek(){ 
    alert(self); 
} 
Questions connexes