2016-06-22 3 views
1

私は2つのテキストフィールドの間で双方向の更新を行っています(注:MVVMバインディングを使用したくありません)。ExtJSのコンポーネントからリスナーを削除する

テキストフィールドテキストフィールド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() + "!") 
      } 
     } 

    }] 
}); 

上記の例で明らかに私がキーを押すと、無限の「!」という2つのテキストフィールドが表示されます。最後に。

フィドルはここにある:私はリスナーを無効にする必要が

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

。 (..)私は私のリスナーへの参照を必要とするので、私はsetValueの後に戻ってそれを追加することができますしかし

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

:私は「のremoveListener」を見ていた、と私はあなたがこのようにそれを使うだろうと思います発生しました。

答えて

4

ビットの周りに掘った後、私はsuspendEventsresumeEventsは私の問題を解決していることが分かりました。

 r[0].suspendEvents(); 

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

     r[0].resumeEvents(); 

すべてのリスナーを無効にしてからすべて有効にします。

+2

「suspendEvent」を使用して、特定のイベントを中断するために名前を渡すことができます。 –

関連する問題