我有多个控制器,假设它们是控制器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',而不是来自两个
答案 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
中的控制器阵列,则需要在创建子控制器后添加侦听器。