2009-09-04 15 views
1

私はいくつかのYUIオブジェクトを含むJavascriptオブジェクトを作成しています。重要なのは、私のオブジェクトには、それ自身のYUIタブが含まれている必要があります。そのため、同じページにオブジェクトの複数のインスタンスを表示したり、タブで独自のオブジェクトインスタンスを制御できるようになります。YUIとJavascriptでネストされたオブジェクト

次のように私はそれを設定:ここでは

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); 
    } 

}); 

が問題です。私は警告(この)を期待する。スケジューラのインスタンスに警告するthis.showWeekで。代わりに、それは私にタブリを与えている。私はthis.parentに警告してみました。答えとして「未定義」が与えられました。

私はこれをどのようにする必要があるのですか?

答えて

1

addListenter方法は、スコープ引数を取ります。だから、(あなたはYUIを使用しているので)あなたの問題を解決するために、以下にお電話を変更することができます。

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

はどうもありがとうございました。魅力のように働いた。 –

+0

ようこそ。 – seth

0

オブジェクトのイベント(この場合はtab0によって保持されているオブジェクト)に関数をアタッチすると、そのオブジェクトは通常、実行時にその関数のコンテキストになります(this)。

は、このようにコードを調整します -

var self = this; 
this.showWeek(){ 
    alert(self); 
} 
関連する問題