2

我有多个控制器,假设它们是控制器 Main 和 Sub,
Controller Sub 触发一个事件,我想在控制器 Main 上捕获它,
我该怎么办?谢谢!

编辑:我在这里粘贴我的代码

在子控制器中:

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');       
},

所以,我刚刚从 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

在子控制器中,在处理函数之一中,您可以编写以下代码。

....
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 回答