I gestori di eventi vengono solitamente chiamati da un ambito diverso (valore this
). Se invece si è un singolo valore nel gestore, scoping lessicale è il modo più semplice per andare:
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!
},
}
)
)
O se davvero si vuole l'oggetto padre disponibile come this
nel vostro gestore di eventi, è possibile utilizzare Ext.Function.bind
per modificare il campo di applicazione:
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'
}
)
)
Aggiornamento: Ext.Function.bind
è una caratteristica ExtJS 4. Se siete su ExtJS 3.x o inferiore, è possibile utilizzare Function.createDelegate
allo stesso fine:
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
}.createDelegate(this)
}
)
)
@Abdel: Perché hai rimosso il tag extjs4 da questa domanda? Se è nella versione 4 dovrebbe usare 'Ext.Function.bind', ma se è su 3 o meno dovrebbe usare' Function.createDelegate' per cambiare l'ambito della funzione. In questo caso, la versione è significativa. – wes
@wes, correggimi se ho torto .. non c'è un evento 'check' per la casella di controllo in extjs4. –
Molto perspicace! Ho perso questo. Inoltre, se fosse su v4, sarebbe Ext.form.field.Checkbox. Aggiornerò la mia risposta :) – wes