Ext JS - 处理自定义事件

时间:2015-07-23 16:25:53

标签: javascript events extjs

我试图了解自定义事件。我希望某些实体成为听众,然后能够在不知道谁在听的情况下发起事件。

我在主控制器中有这个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,但没有运气。最终,我希望能够拥有任何实体:组件,数据存储,应用程序,视图等作为监听器,并能够广播事件并对其采取行动。

我可以使用clickfocus这样的内置事件,但不能使用这些自定义事件。

任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

而不是:

component.on('userTimeOut', this.onUserTimeOut);

使用:

Ext.GlobalEvents.on('userTimeOut', this.onUserTimeOut, component);

然后你可以像你一样打电话给fireEvent。在onUserTimeOut中,您可以通过this访问代表该活动的组件,例如this.id