如何使用Sencha Touch2监听控制器中控制器触发的事件

时间:2012-05-12 12:34:43

标签: sencha-touch-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',而不是来自两个

3 个答案:

答案 0 :(得分: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
    })
});

答案 1 :(得分:0)

在Sub controller中,在其中一个处理函数中,您可以编写以下代码。

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

在主控制器中,您可以在某些组件上侦听该事件,如下所示

......
listeners : {
    'mycustomevent' : function() {
             // ....
             // ....
     }
}
......

答案 2 :(得分:0)

首先,您需要引用其他控制器。这可以通过以下方式完成:

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

然后在您的"倾听"的init / launch方法中控制器(或任何其他适合你的地方)你可以添加一个事件监听器:

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

如果要手动创建子控制器而不是将其添加到app.js中的控制器阵列,则需要在创建子控制器后添加侦听器。