1

Ext.app.Controllerクラスのcontrol()メソッドを使用するExtJSでは、コントローラーのinit()メソッド内のExt.ComponentQueryを介して選択されたコンポーネントにリスナーを追加できます。

これを行うと、デフォルトで、ハンドラー関数内にコントローラースコープがあります。ここで他のスコープを指定する方法はありますか?

たとえば、この場合:

Ext.define('BackOffice.controller.BaseList', {
    extend: 'Ext.app.Controller',

    refs: [
        // some refs
    ],

    init: function() {
        this.control({
            'bo-list-view > toolbar > button[action=create-new]': {
                click: this.onCreateNewClick
            },

            'bo-list-view > toolbar > button[action=edit]': {
                click: this.onEditClick
            },

            'bo-list-view > toolbar > button[action=refresh]': {
                click: this.onRefreshClick
            }
        })
    },

    // ...
});

ハンドラー関数では、この情報に基づいていくつかのアクションを実行するためにクリックされた正確なボタンを知りたいです。

スコープフィールドを介してボタン宣言内でスコープを指定しようとしましたが、これは役に立ちません。

また、Ext.bind()を使用して問題を解決したかったのですが、関数をバインドするには、ボタンへの参照が再度必要です。

.on()を使用してリスナーを追加することは、アプリケーションの起動メソッドの前に呼び出されるため、init()では機能しません。

スコープを保存するコントローラーからこのボタンにリスナーを追加する方法はありますか?

アップデート

ボタンへの参照は、最初の引数としてハンドラー関数に渡されます。これで私の問題は解決しますが、control()メソッド内でスコープを定義する方法を探しています。

4

2 に答える 2

2

構成オブジェクトを使用すると、より高度なスコープ機能を実現できます。

Ext.define('BackOffice.controller.BaseList', {
    extend: 'Ext.app.Controller',

    refs: [
        // some refs
    ],

    init: function() {
        this.control({
            'bo-list-view > toolbar > button[action=create-new]': {
                // This will call onCreateNewClick with global window as the scope
                click: {fn: this.onCreateNewClick, scope: window}
            },

            'bo-list-view > toolbar > button[action=edit]': {
                click: {fn: this.onEditClick, scope: otherScopeObj}
            },

            'bo-list-view > toolbar > button[action=refresh]': {
                click: this.onRefreshClick
            }
        });
    },

    // ...
});

すべての通常の構成が機能するかどうか(つまり、単一:true)はわかりませんが、スコープは機能します。

于 2014-03-06T22:02:04.320 に答える
1

clickイベントの説明を見ると、 http: //docs.sencha.com/ext-js/4-0/# !/ api / Ext.button.Button-event-clickで、最初の引数が次のようになっていることがわかります。ボタンへのポインタ。つまり、スコープを変更する必要はありません。関数で引数を宣言するだけで、どのボタンが押されたかがわかります。

于 2012-05-07T21:54:53.730 に答える