2011-03-03 9 views
0

親愛なるすべて プログラムで新しいDojoボタンを作成しました。私は自分のカスタム道場クラスでこれをやっています。ボタンの作成中に、ボタンをクリックしたときに呼び出されるonClickメソッドを定義しました。このメソッドはクラスの一部です。ボタンをクリックすると "this"のスコープが異なるため、そのメソッドを呼び出すことができません。この問題を解決するために私を助けてくれますか?プログラムで作成したDojoボタン - スコープの問題

dojo.declare("CustomClass",null,{ 
createCustomButton:function(){ 
var button = new dijit.form.Button({onClick:function(){ 
        removetrack(); 
        testDataGrid.filter({status:"COMPLETED"}); 
       }},"testButton1"); 
}, 
removetrack:function(){ 
//some logic 
} 
}); 


var customObj=new CustomClass(); 
customObj.createCustomButton(); 

私は、私が作成したボタンをクリックしたときに呼び出されるremovetrack()方法を必要としています。私はより良い方法を行うために管理することはできません

+0

は、それは私がそれをcreateCustomButton内でこの範囲だと仮定の下にお答えします。あなたがのremoveTrack()で呼び出すことにしたい範囲をあなたの質問から明らかではないが、それは間違っている場合は明確にし、私があれば表示されますしてください私は私の答えを変更することができます:) – mrtom

答えて

0

dojo.hitch()を使用します。

dojo.declare("CustomClass",null,{ 
    createCustomButton:function(){ 
     var button = new dijit.form.Button({ 
      onClick:dojo.hitch(this, function(){ 
       this.removetrack(); 
       testDataGrid.filter({status:"COMPLETED"}); 
      }) 
     },"testButton1"); 
    }, 
    removetrack:function(){ 
     //some logic 
    } 
}); 


var customObj=new CustomClass(); 
customObj.createCustomButton(); 
+0

ありがとうございました。私はthis.removetrack()を使う必要があると思う。 – Steves

+0

はい、あなたは良いスポットです。コードサンプルを更新します – mrtom

-1

は、ケースであなたは、緊急の修正

var button = new dijit.form.Button({ 
        label: "Custom!", 
        onClick:function(){ 
        CustomClass().removetrack(); 
       }},"result"); 

を必要とする誰かがあなたをより良いオプションを与えることができることを望みます。

+0

いいえ、それは動作しません。 CustomClass関数にattachetrack関数が追加されているようです。 – mwilcox