イベントハンドラーは通常、異なるスコープ(this
値)から呼び出されます。ハンドラー内の単一の値だけが必要な場合は、字句スコープが最も簡単な方法です。
var getUrl = 'test'; // now it's just a regular variable
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(getUrl); // still available - lexical scope!
},
}
)
)
this
または、イベントハンドラーのように親オブジェクトを使用できるようにしたい場合は、次を使用Ext.Function.bind
してスコープを変更できます。
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: Ext.Function.bind( function(checkbox, checked) {
alert(this.getUrl);
}, this ), // second arg tells bind what to use for 'this'
}
)
)
更新:Ext.Function.bind
ExtJS4の機能です。ExtJS 3.x以下を使用Function.createDelegate
している場合は、同じ目的で使用できます。
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
}.createDelegate(this)
}
)
)