我试图了解自定义事件。我希望某些实体成为听众,然后能够在不知道谁在听的情况下发起事件。
我在主控制器中有这个afterrender
处理程序,确认它正在调用,并且选项卡控件是" on"对于活动userTimeOut
:
// Register components
registerComponent: function (component) {
console.log('registering\tid\t' + component['id']);
if (component['id'].indexOf('tab-') > -1) {
console.log("tab getting user timeout event handler\t" + component['id']);
component.on('userTimeOut', this.onUserTimeOut);
}
return true;
},
这是onUserTimeOut
处理程序:
onUserTimeOut: function (caller) {
console.log('user-time-out\tid' + this['id'] + '\tcaller-id\t' + caller['id']);
}
我在主控制器中通过按钮点击调用此代码。确认它也会被调用:
fireUserTimeOut: function(button) {
console.log('fireUserTimeOut\t' + button['id']);
Ext.GlobalEvents.fireEvent('userTimeOut', button);
},
在网上搜索时,我尝试了多种方法,而不是Ext.GlobalEvents
,但没有运气。最终,我希望能够拥有任何实体:组件,数据存储,应用程序,视图等作为监听器,并能够广播事件并对其采取行动。
我可以使用click
或focus
这样的内置事件,但不能使用这些自定义事件。
任何帮助都将不胜感激!
答案 0 :(得分:1)
而不是:
component.on('userTimeOut', this.onUserTimeOut);
使用:
Ext.GlobalEvents.on('userTimeOut', this.onUserTimeOut, component);
然后你可以像你一样打电话给fireEvent
。在onUserTimeOut
中,您可以通过this
访问代表该活动的组件,例如this.id
。