我有一个控制器将处理程序定义为函数:
init: function() {
this.control({
'wtToolbar menuitem[action=primario] menuitem[action=primer_anio]': {
click: this.mostrarAbmAlumnos(1)
},
'wtToolbar menuitem[action=primario] menuitem[action=primer_anio]': {
click: this.mostrarAbmAlumnos(2)
},
'wtToolbar menuitem[action=primario] menuitem[action=primer_anio]': {
click: this.mostrarAbmAlumnos(3)
},
'wtToolbar menuitem[action=primario] menuitem[action=primer_anio]': {
click: this.mostrarAbmAlumnos(4)
},
'wtToolbar menuitem[action=primario] menuitem[action=primer_anio]': {
click: this.mostrarAbmAlumnos(5)
},
'wtToolbar menuitem[action=primario] menuitem[action=primer_anio]': {
click: this.mostrarAbmAlumnos(6)
}
});
},
/**
* Muestra la ventana de gestion de un grado.
* @param {int} idGradoSolicitado Id del grado a gestionar.
* @return {void}
*/
mostrarAbmAlumnos: function(idGradoSolicitado) {
var store = Ext.create('AM.store.Alumnos', {}).load({
params: {idGrado: idGradoSolicitado}
});
var grid = Ext.create('AM.view.grids.AbmAlumno', {dataStore: store});
var win = Ext.create('AM.view.ui.WindowDecorator',
{aTitle: 'Gestión de alumnos', anItem: grid});
win.show();
}
/* End of controller */
});
所以,我有两个问题:
1)创建窗口并在加载页面中显示6次。
2)当我点击激活envent的按钮时,控制台中会显示下一个错误:TypeError:listener.fireFn未定义
任何想法?。
答案 0 :(得分:1)
您正在调用函数,而不是传递函数引用。
click: this.mostrarAbmAlumnos(1)
this.mostrarAbmAlumnos(1)
不返回函数,这就是解释TypeError的原因。
将此行替换为:
click: Ext.pass(this.mostrarAbmAlumnos, [1])
Ext.pass
将创建一个新函数,使用正确的参数调用this.mostrarAbmAlumnos
。您可以选择指定范围(如果在用作事件处理程序的函数中使用this
关键字,则需要该范围。)
现在您的代码中存在最后一个问题。您正在注册同一事件的六倍。如果单击该按钮,将会弹出6个窗口。您需要为每个窗口添加不同的菜单项;)