Ext JS - 在运行时添加侦听器

时间:2015-07-21 14:01:13

标签: javascript events extjs extjs5

我希望能够将侦听器添加到设置文件中指定的活动元素。安装文件可能是这样的:

<listeners>
    <listener>
        <field>id</field>
        <match>button-*</match>
        <using>reg-exp</using>
        <excludes>
            <exclude>button-yes</exclude>
            <exclude>button-no</exclude>
            <exclude>button-cancel</exclude>
        </excludes>
        <event>click</event>
        <action>onButtonClick</action>
    </listener>
    <listener>...</listener>
</listeners>

这意味着,除了button-*button-yes-no之外,ID匹配-cancel的任何元素都会在onButtonClick时调用click事件被触发。

它不一定是内置事件,可以是自定义的,例如fileSystemExceptionuserTimedOut。因此,可以在代码中的某处触发事件,并且监听它的所有元素都将调用相应的操作。

理想情况下,希望在创建任何元素之前尽早加载安装文件,并且能够将监听器添加到运行时创建的元素。因此,例如,在运行中创建的具有ID button-reject的新元素将满足标准,将获得监听器。所以我想它必须扩展一个低级创建方法?

在ExtJS中有没有这样的事情?比如扩展一个或多个基类?

1 个答案:

答案 0 :(得分:2)

如果您可以将此文件加载到JSON对象或ExtJS HashMap中,那么您可以全局侦听组件的afterrender事件以检查您的HashMap或JSON对象是否匹配并应用相应的监听器。

这样的东西可能会起作用,但这确实意味着每个组件都必须检查是否存在应该应用的侦听器,这可能会产生巨大的性能开销。