3

ビューポートの唯一のアイテムとしてタブパネルがレンダリングされたMVCアプリがあります。タブ内に同じタイプのコンポーネントを配置したいと思います。イベント処理はすべてのタブ内で同じです。

したがって、アクティブなタブへのExtJS MVCコントローラー参照が必要です。これにより、アクティブなタブのコンポーネントでイベントを実行できるようになります。そのようなことは可能refですか?

私の現在のアプローチはこれです:

  1. タブパネルへの参照を取得
  2. getActiveTab()を呼び出す
  3. アクティブなタブでコンポーネントのコントローラーイベントを呼び出す

上記の3つのステップを1つのコントローラーにカプセル化することは可能refですか?美しいだろう:-)

ExtJS4.1を使用しています。

4

2 に答える 2

3

個人的には、コントローラーのリファレンスは過大評価されていると思います。これは、説明どおりに使用できる単純なケースのように聞こえますが、イベントをリッスンして、起動コンポーネントから必要なコンポーネントに移動することを好みます。

あなたの場合、タブ パネルに通常の ext パネルが含まれていると仮定すると、次のようになります。

onButtonClick: function (button) {
    var panel = button.up('panel[tab]');

    if (panel) {
        panel.someMethod();
    }
}

このupメソッドは、xtype panel であり、tab という名前のプロパティを持つ最も近い祖先を見つけます。より具体的な xtype または既知のプロパティがある場合は、代わりにそれらを使用してください。

パネルはアクティブなパネルである必要があります (それ以外の場合、ボタンはどのようにクリックされましたか?) がup、タブ パネルの別のレベルに移動し、そこに activeTab を取得することで確認できます。

onButtonClick: function (button) {
    var panel = button.up('panel[tab]'),
        tabPanel = button.up('tabpanel'),
        activeTab = tabPanel && tabPanel.getActiveTab();

    if (panel && panel === activeTab) {
        panel.someMethod();
    }
}
于 2012-07-12T12:44:48.013 に答える
1

あなたのtabPanelが持っているとしましょうitemId: 'content'。そのパネル内にはたくさんのタブがあり、各タブにはたくさんのボタンがあります (例として)。そして、これらすべてのボタンのクリックを 1 つのコントローラーで処理したいとします。私はあなたを正しく理解していますか?

コントローラー内の単純な参照が機能すると思います:

this.control('#content button', { 
       click: this.buttonClicked
   }
});
于 2012-07-11T16:32:42.020 に答える