2017-03-10 1 views
0

동일한 리스너 내에 두 개의 함수를 추가하여 두 값이 결합 된 두 개의 값을 결합하여 선택한 값에 따라 활성화 할 수 있습니다. 이것은 내가 만든 리스너입니다 :하나의 ExtJS 리스너에 함수 추가

listeners: { 
      render: function() { 
       var pago = this; 
        pago.onChangeCuentasFn(); 
        pago.onChangeFormaPagoFn(); 
      } 
} 

을 그리고 이러한 리스너가 호출하는 기능은 다음과 같습니다

onChangeFormaPagoFn: function(combo, record, index) { 
    var iban = Ext.getCmp('clieIban'); 
    iban.clearInvalid(); 
    if (record.data.codigo == 4) { 
     iban.setDisabled(false); 
    } else { 
     iban.setDisabled(true); 
    } 
}, 

onChangeCuentasFn: function(combo, record, index) { 
    var cuenta = Ext.getCmp('clieCuentas'); 
    cuenta.clearInvalid(); 
    if (record.data.codigo == 3) { 
     cuenta.setDisabled(false); 
    } else { 
     cuenta.setDisabled(true); 
    } 
}, 

내가 청취자 내부 기능의 addListener을 추가하거나 재생해야합니까?

감사합니다.

+0

나는 당신이 여기 요구하는지 정말 모르겠어요. 현재 가지고있는 코드의 문제점은 무엇입니까? –

+0

내가 만든 리스너는 양식의 콤보이며 여기에는 4 가지 결제 방법이있는 드롭 다운이 있습니다. 그런 다음 두 개의 필드가 비활성화되고 하나의 지불 방법을 선택하면 둘 중 하나가 활성화됩니다. 이 경우 그들은 지불금 3과 4의 형태입니다. 그러나 어느 쪽이든 하나를 선택하면 하나의 돈만 열립니다. 다른 걸음 걸음. 콤보 코드를 볼 필요가 있습니까? – Bufank85

답변

1

Observable 방법 addListener 동작이 누적됩니다. 즉, 호출자가 두 번 호출하면 처리기의 bth가 시간순으로 처리됩니다. instance.addListener(eventName, handler1, scope1)instance.addListener(eventName, handler2, scope2)eventName이 발사 될 때 handler1이 실행됩니다 및 (handler1 의도적으로 이벤트 전파를 채굴장 또는 false를 반환 does'n 경우) 다음 handler2이 실행됩니다합니다.

그러나 구성 영역에서 수신자를 선언해도 addListener을 두 번 호출 할 수 없습니다. 여기서 암시 적 호출을 사용했지만 범위와 인수는 유지하지 않을 수도 있고, 처리기를 Ext.Function 유틸리티 Ext.Function.createSequence과 결합 할 수도 있습니다. 범위와 인수

var sayHi = function(name){ 
alert('Hi, ' + name); 
}; 

sayHi('Fred'); // alerts "Hi, Fred" 

var sayGoodbye = Ext.Function.createSequence(sayHi, function(name){ 
                 alert('Bye, ' + name); 
       }); 

sayGoodbye('Fred'); // both alerts show 

암시 전화 :

listeners: { 
     render: function() { 
      var me = this; 

      if(me.onChangeCuentasFn.apply(me, arguments)!== false) { // give first hanlder a chance to stop execution if false is returned 
       me.onChangeFormaPagoFn.apply(me, arguments); 
      } 
     } 
} 

우아한 방법 :

initComponent: function() { 
    var me = this, 
     combindHanlerFn = Ext.Function.createSequence(me.onChangeCuentasFn,me.onChangeFormaPagoFn, me); 



    Ext.apply(me, { 
    listeners: { 
     render:combindHanlerFn 
    } 
    }); 

    return me.callParent(arguments); 
); 
관련 문제