控制器中的Extract方法

时间:2013-09-18 21:18:35

标签: extjs listener undefined

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

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未定义

任何想法?。

1 个答案:

答案 0 :(得分:1)

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

click: this.mostrarAbmAlumnos(1)

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

将此行替换为:

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

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

现在您的代码中存在最后一个问题。您正在注册同一事件的六倍。如果单击该按钮,将会弹出6个窗口。您需要为每个窗口添加不同的菜单项;)