【问题标题】:extjs - How to create listener for child component's custom eventextjs - 如何为子组件的自定义事件创建监听器
【发布时间】:2014-08-22 22:01:21
【问题描述】:

我正在使用具有另一个子面板(例如 childPanel)的面板(例如 parentPanel)。如何从 childPanel 触发将被 parentPanel 捕获的自定义事件?

【问题讨论】:

    标签: extjs event-handling listener


    【解决方案1】:

    像这样:

    Ext.define('Ext.ux.form.Panel', {
        extend: 'Ext.form.Panel',
        title: 'Simple Form',
        bodyPadding: 5,
        width: 350,
    
        layout: 'anchor',
        defaults: {
            anchor: '100%'
        },
    
        defaultType: 'textfield',
        initComponent: function() {
            var me = this;
            me.items = [{
                fieldLabel: 'First Name',
                name: 'first',
                allowBlank: false
            }];
            me.callParent(arguments);
        },
    
        afterRender: function() {
            var me = this;
            me.callParent(arguments);
            // in case of a form you can also use the findField() method
            // I used down() because it will work with all sort of containers
            me.down('textfield[name=first]').on('change',me.onFirstnameChange,me);
        },
    
        onFirstnameChange: function(field) {
            // custom handler
        }
    });
    

    仅在单个实例上执行此操作的方式与您需要使用 afterrender 事件而不是静态 template method 的方式相同。

    注意: 如果这不符合您的需求,您需要发布更详细的问题(带有示例代码)以获得更详细的答案。

    编辑:

    向新组件添加自定义事件:

    initComponent: function() {
        // ...
        me.addEvents('customeventname');
        // ... 
    }
    

    您现在可以在此组件的实例上注册此事件的侦听器,并通过调用 fireEvent('customeventname', args) 触发事件,其中 args 是您要调用每个侦听器的参数。

    【讨论】:

    • -这对我来说很好。只是没有使用组件预定义事件(在您的示例中为“更改”)。我想在文本字段中触发自定义事件。请使用具有 fireEvent() 的孩子更新示例
    • @VVK 嗯,我不确定我是否正确...我在帖子中添加了更多信息。如果这仍然没有帮助您,您将需要提供更多信息。您想为新组件触发自定义事件吗?以另一个组件的名义自己触发一个事件 - 如果是这样,这里的触发器是什么?
    • -谢谢。顺便说一句,我可以在不向文本字段添加侦听器的情况下在面板中捕获 customeventname(比如我有很多文本字段,我不想为每个字段查找并添加侦听器)。
    • @VVK 不,你不能。但是您可以冒泡由冒泡目标触发的事件。然后气泡目标可以注册到它自己的事件...
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2020-12-30
    相关资源
    最近更新 更多