0

我有一个控制器,将处理程序定义为函数:

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)当我单击触发事件的按钮时,控制台中会显示下一个错误:TypeError:listener.fireFn is undefined

有任何想法吗 ?。

4

1 回答 1

1

您正在调用函数,而不是传递函数引用。

click: this.mostrarAbmAlumnos(1)

this.mostrarAbmAlumnos(1)不返回函数,这就是您的 TypeError 的原因。

将此行替换为:

click: Ext.pass(this.mostrarAbmAlumnos, [1])

Ext.pass将创建一个this.mostrarAbmAlumnos使用正确参数调用的新函数。您可以选择指定范围(如果您this在用作事件处理程序的函数中使用关键字,则需要这样做)。

现在您的代码中还有最后一个问题。您注册了六次相同的事件。如果您单击该按钮,6 个窗口将弹出到您的面前。您需要为每个窗口添加不同的菜单项;)

于 2013-09-18T21:33:17.147 回答