改变监听器在extjs中不起作用

时间:2015-02-10 16:02:45

标签: extjs extjs4 listener

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

提前感谢。

这是下面的代码:

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);
            }

        });

当我写点击而非改变时,它完美地工作。我不知道我做错了什么。

1 个答案:

答案 0 :(得分: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()的子项需要包含change事件监听器配置。

修改

您可以在Afterrender事件中循环播放comp中的子项,对于任何旋转器等,可以通过这种方式添加更改事件。