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

change listener doesnt work in extjs

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

提前致谢。

下面是代码:

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 事件仅针对面板组件。因此,尝试附加更改事件是行不通的,因为您正试图在面板上执行此操作:

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 上的子项,对于任何微调器等,以这种方式添加更改事件。