2

複数のコントローラーがあり、それらがコントローラーのメインとサブであると仮定し、
コントローラーのサブがイベントを発生させます。コントローラーのメインでそれをキャッチしたいのですが、
どうすればよいですか? ありがとう!

編集:ここにコードを貼り付けます

サブコントローラーで:

config: {

    control:    {
        'pinlist': {
            disclose: 'showPinDetails'                
        }                    
    }

} 


, showPinDetails: function(list, record) {
    console.log('showPinDetails');

    this.fireEvent('showPinDetails',list, record);

}

メインコントローラー:

requires: [
            'MyApp.controller.Sub',
            ],  


config: {

    listeners: {
        'showPinDetails': 'showPinDetails',
    }
} , 
showPinDetails: function(list, record){
    console.log('showPinDetails');       
},

そのため、2 つではなく Sub からログ「showPinDetails」を取得しました。

4

3 に答える 3

4

Sub コントローラーで、次のような方法でイベントを発生させたとします。

yourComponent.fireEvent('my_event',this);

次に、メイン コントローラーでプログラムによってリスナーとハンドラーを定義する必要があります。ベスト プラクティスは次のとおりです。

Ext.define('app.controller.Main', {
    extend: 'Ext.app.Controller',
    config: {
        refs: {
               yourComponent: 'enter your selector here, eg. #id'
        },
        control: {
               yourComponent: {
                 'my_event': 'my_event_handler'
               }
        }
    },
    my_event_handler: function() {
      //do whatever you want here
    })
});
于 2012-05-12T13:19:53.613 に答える
0

サブコントローラーでは、ハンドラー関数の 1 つに、次のコードを記述できます。

....
btnClick : function() {
   myPanel.fireEvent('mycustomevent', this);
}
....

メインコントローラーでは、以下のようなコンポーネントでそのイベントをリッスンできます。

......
listeners : {
    'mycustomevent' : function() {
             // ....
             // ....
     }
}
......
于 2012-05-12T12:52:38.707 に答える
0

まず、他のコントローラーへの参照が必要です。これは次の方法で実行できます。

var other = YourAppName.app.getController('OtherController');

次に、「リスニング」コントローラー (またはその他の任意の場所) のinit/launchメソッドで、イベント リスナーを追加できます。

other.on({
    myCustomEventName: function () {
        console.log('Hello World');
    }
});

サブコントローラーをコントローラー配列に追加するのではなく、手動で作成する場合は、サブコントローラーをapp.js作成した後にリスナーを追加する必要があります。

于 2015-01-22T15:56:24.100 に答える