2016-06-22 2 views
1

У меня есть двухстороннее обновление между двумя моими текстовыми полями (ПРИМЕЧАНИЕ. Я не хочу использовать привязку MVVM для этого).Удаление прослушивателей из компонентов в ExtJS

обновления текстового поля 1 и поля 2 наоборот, когда есть нажатие клавиши. Мне нужно отключить слушателей на получаемом текстовом поле, иначе я окажусь в бесконечном цикле.

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() + "!") 
      } 
     } 

    }] 
}); 

Очевидно, что в приведенном выше примере, если я нажатие клавиши я в конечном итоге с двумя TextFields с бесконечным «!» в конце.

Fiddle здесь:

https://fiddle.sencha.com/#fiddle/1ces

мне нужно отключить слушателей. Я имел взгляд на « удаления слушателя», и я думаю, что вы бы использовать его как это:

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

Однако мне нужна ссылка на мой слушатель, так что я могу добавить его обратно один раз в SetValue (..) произошло.

ответ

4

После рытья вокруг немного, я узнал, что suspendEvents и resumeEvents решает мою проблему.

 r[0].suspendEvents(); 

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

     r[0].resumeEvents(); 

Отключить всех слушателей и снова включить их.

+2

Обратите внимание, что вы можете использовать 'suspendEvent' и передать имя для приостановки определенных событий. –

Смежные вопросы