更改侦听器在 extjs 中不起作用

Posted

技术标签:

【中文标题】更改侦听器在 extjs 中不起作用【英文标题】:change listener doesnt work in extjs 【发布时间】:2015-04-10 18:02:21 【问题描述】:

我有一个动态表单,我想在更改字段值时添加一个侦听器,但我无法做到这一点。我添加了一个单击侦听器,但是当我将其更改为更改时它不起作用。

提前致谢。

下面是代码:

panel = Ext.define('MyApp.view.dynamicform.Form', 
        extend: 'Ext.form.Panel',
        alias: 'widget.dynamicformform',

        title: title,
        id: 'dynamicform.Form',
        bodyPadding: 5,
        autoScroll: true,
        layout: 'auto',

        defaults: 
            anchor: '100%'
        ,
        dockedItems: [],
        items : genItems(storeData),
        listeners: 
            afterrender: function (comp) 
                var element = comp.getEl();
                element.on('change', function(e,el) 
                    alert('blabla')
                );
            
            ,          
            initComponent : function() 
                this.callParent(arguments);
            

        );

当我编写单击而不是更改时,它可以完美运行。我不明白我做错了什么。

【问题讨论】:

当它被传递到 afterrender 监听器时,'comp' 到底是什么。查看您的代码,我会说它是面板本身? 是的,它是面板@mindparse 嗯,我很确定 extjs 中的面板没有更改事件。通常,该事件用于组合框或复选框等输入。 genItems() 中也返回了什么? genItems() 生成组合框和微调器 【参考方案1】:

您为其添加侦听器的 afterrender 事件纯粹是针对面板组件的。因此,尝试附加更改事件是行不通的,因为您尝试在面板上执行此操作:

afterrender: function (comp) 
                var element = comp.getEl();
                //element is the panel here, not child items such as spinners...
                element.on('change', function(e,el) 
                    alert('blabla')
                );
            

您说单击有效,但我认为这只是因为您单击了面板上的任何位置,包括您正在呈现的子项。相反,在 genItems() 中返回的子项需要包含更改事件侦听器配置。

编辑

您可以在 afterrender 事件中循环遍历 comp 上的子项,对于任何微调器等,以这种方式添加更改事件。

【讨论】:

谢谢你。当我得到子元素并添加监听器时,它就可以工作了。

以上是关于更改侦听器在 extjs 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ComboBox 在 ExtJS 的 EditorGridPanel 中不起作用

Ext.getCmp 在 extjs 中不起作用

Extjs 3.4 checkchange 监听器在 Checkcolumn 上不起作用

extjs 3 - 卡片布局在 tabpanel 中不起作用

extjs4.1 文本字段 dblclick 事件在 mvc 中不起作用

ExtJS3 快速提示在 IE9 中不起作用