Les gestionnaires d'événements sont généralement appelés à partir d'un champ d'application différent ( this
). Si tout ce que vous voulez, c'est une seule valeur dans le gestionnaire, le cadrage lexical est la solution la plus simple :
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!
},
}
)
)
Ou si vous voulez vraiment que l'objet parent soit disponible en tant que this
dans votre gestionnaire d'événement, vous pouvez utiliser Ext.Function.bind
pour modifier le champ d'application :
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'
}
)
)
Mise à jour : Ext.Function.bind
est une fonctionnalité d'ExtJS 4. Si vous utilisez ExtJS 3.x ou une version inférieure, vous pouvez utiliser Function.createDelegate
à la même fin :
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
}.createDelegate(this)
}
)
)