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 */
});

だから、私は2つの問題があります:

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.passthis.mostrarAbmAlumnos正しい引数で呼び出す新しい関数を作成します。thisオプションでスコープを指定できます (イベント ハンドラーとして使用される関数でキーワードを使用する場合に必要です)。

ここで、コードに最後の問題が 1 つあります。同じイベントに 6 回登録しています。そのボタンをクリックすると、6 つのウィンドウが顔に飛び出します。ウィンドウごとに異なるメニュー項目を追加する必要があります;)

于 2013-09-18T21:33:17.147 に答える