2016-06-22 6 views
1

Ich habe eine zwei-Wege-Aktualisierung zwischen zwei meiner Textfelder (HINWEIS: Ich möchte MVVM-Bindung für diese nicht verwenden).Entfernen von Listenern von Komponenten in ExtJS

TextField1 Updates TextField2 und umgekehrt, wenn eine Taste gedrückt ist. Ich muss die Listener im empfangenden Textfeld deaktivieren, sonst lande ich in einer Endlosschleife.

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

    }] 
}); 

Offensichtlich in dem obigen Beispiel, wenn ich eine keypress beende ich mit zwei Textfeldern mit unendlichem up ‚!‘ Am Ende.

Fiddle ist hier:

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

ich die Zuhörer deaktivieren müssen. Ich hatte einen Blick auf ‚removeListener‘, und ich glaube, Sie es wie folgt verwenden würde:

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

Jedoch habe ich einen Verweis auf meine Zuhörer müssen, also kann ich es wieder einmal die setValue hinzufügen (..) ist vorgefallen.

Antwort

4

Nach ein wenig herum zu graben, fand ich, dass suspendEvents und resumeEvents mein Problem löst aus.

 r[0].suspendEvents(); 

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

     r[0].resumeEvents(); 

Die alle Listener deaktivieren und sie alle wieder aktivieren.

+2

Hinweis: Sie können 'suspendEvent' verwenden und den Namen übergeben, um bestimmte Ereignisse auszusetzen. –