2016-06-22 4 views
1

두 개의 텍스트 필드 사이에 양방향 업데이트가 있습니다 (참고 : MVVM 바인딩을 사용하고 싶지 않습니다).ExtJS의 구성 요소에서 Listener 제거

텍스트 필드 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() + "!") 
      } 
     } 

    }] 
}); 

은 물론 위의 예에서 나는 무한한 두 개의 텍스트 필드와 끝까지 '!' 결국.

바이올린은 여기에 있습니다 : 나는 청취자를 비활성화해야

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

. 나는 '의 removeListener'를 살펴했고, 나는 당신이이 같이 사용할 것이라고 생각 :

내 리스너에 대한 참조가 필요합니다, 그래서 SetValue는 일단 다시 추가 할 수 있습니다 그러나
 r[0].removeListener('change'); 

(..) 발생했습니다.

답변

4

조금 주위에 파고 후, 나는 suspendEventsresumeEvents 내 문제를 해결할 수 있다는 것을 발견했다.

 r[0].suspendEvents(); 

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

     r[0].resumeEvents(); 

모든 수신기를 비활성화하고 모두 다시 사용하도록 설정합니다.

+2

참고로 'suspendEvent'를 사용하고 이름을 전달하여 특정 이벤트를 일시 중단 할 수 있습니다. –

관련 문제