Обработчики событий обычно вызываются из другой области (значение 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
- это функция 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)
}
)
)