Los controladores de eventos generalmente se llaman desde un alcance diferente (valor this
). Si lo que quieres es un valor único en el controlador, ámbito léxico es la forma más fácil de ir:
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 si realmente desea que el objeto primario disponible como this
en el controlador de eventos, puede utilizar Ext.Function.bind
a modificar el alcance:
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'
}
)
)
actualización: Ext.Function.bind
es una característica ExtJS 4. Si estás en ExtJS 3.x o menor, puede utilizar Function.createDelegate
al mismo fin:
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
}.createDelegate(this)
}
)
)
@Abdel: ¿Por qué eliminaste la etiqueta extjs4 de esta pregunta? Si está en la versión 4, debería usar 'Ext.Function.bind', pero si tiene 3 o menos debería usar' Function.createDelegate' para cambiar el alcance de la función. En este caso, la versión es significativa. – wes
@wes, corrígeme si me equivoco .. no hay un evento 'check' para checkbox en extjs4. –
¡Muy perceptivo! Me lo perdí. Además, si estuviera en la v4, sería Ext.form.field.Checkbox. Actualizaré mi respuesta :) – wes