इवेंट हैंडलर आमतौर पर एक अलग दायरे (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
उपयोग कर सकते हैं: अगर सब आप चाहते हैं हैंडलर में एक भी मूल्य है, शाब्दिक scoping जाना सबसे आसान तरीका है गुंजाइश संशोधित:
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
एक ExtJS 4 सुविधा है। आप 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)
}
)
)
@Abdel: आपने इस प्रश्न से extjs4 टैग क्यों हटा दिया? यदि वह संस्करण 4 पर है तो उसे 'Ext.Function.bind' का उपयोग करना चाहिए, लेकिन यदि वह 3 या उससे कम है तो उसे फ़ंक्शन स्कोप बदलने के लिए' Function.createDelegate' का उपयोग करना चाहिए। इस मामले में, संस्करण महत्वपूर्ण है। – wes
@ वेस, अगर मैं गलत हूं तो मुझे सही करें .. extjs4 में चेकबॉक्स के लिए कोई 'चेक' ईवेंट नहीं है। –
बहुत समझदार! मैंने यह खो दिया। इसके अलावा, अगर वह v4 पर था, तो यह Ext.form.field.checkbox होगा। मैं अपना जवाब अपडेट करूंगा :) – wes