从ExtJS中的组件中删除侦听器

从ExtJS中的组件中删除侦听器,extjs,Extjs,我的两个文本字段之间发生了双向更新(注意:我不想为此使用MVVM绑定) textfield1在按键时更新textfield2,反之亦然。我需要禁用Receiving textfield上的侦听器,否则我将进入无限循环 Ext.define('MyApp.view.TestView', { extend: 'Ext.panel.Panel', layout: 'form', items: [{ id: 'tf1', xtype: 'text

我的两个文本字段之间发生了双向更新(注意:我不想为此使用MVVM绑定)

textfield1在按键时更新textfield2,反之亦然。我需要禁用Receiving textfield上的侦听器,否则我将进入无限循环

Ext.define('MyApp.view.TestView', {
    extend: 'Ext.panel.Panel',
    layout: 'form',

    items: [{
        id: 'tf1',
        xtype: 'textfield',
        fieldLabel: '1',
        listeners: {
            change: function() {
                var r = Ext.ComponentQuery.query('#tf2');
                r[0].setValue(this.getValue() + "!")
            }
        }
    }, {
        id: 'tf2',
        xtype: 'textfield',
        fieldLabel: '2',
        listeners: {
            change: function() {
                var r = Ext.ComponentQuery.query('#tf1');
                r[0].setValue(this.getValue() + "!")
            }
        }

    }]
});
显然,在上面的例子中,如果我按下一个键,我会得到两个文本字段,其中包含无限的“!”最后

小提琴在这里:

我需要禁用侦听器。我看过“removeListener”,我想您会这样使用它:

        r[0].removeListener('change');

但是,我需要一个对我的侦听器的引用,这样一旦设置值(..)出现,我就可以将其添加回去。

经过仔细研究,我发现suspendEventsresumeEvents解决了我的问题

        r[0].suspendEvents();

        r[0].setValue(this.getValue() + "!")

        r[0].resumeEvents();

禁用所有侦听器并重新启用所有侦听器。

仔细研究后,我发现挂起事件和恢复事件解决了我的问题

        r[0].suspendEvents();

        r[0].setValue(this.getValue() + "!")

        r[0].resumeEvents();

禁用所有侦听器并重新启用它们。

注意,您可以使用
suspendEvent
并传递名称以挂起特定事件。注意,您可以使用
suspendEvent
并传递名称以挂起特定事件。