2017-03-10 24 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它是累積的行爲。這意味着如果有人調用它,那麼處理程序的兩次將按時間順序執行。 如果 instance.addListener(eventName, handler1, scope1) AND instance.addListener(eventName, handler2, scope2)eventName燒製 handler1被執行,然後handler2被執行(如果handler1 does'n故意採場事件傳播或返回false)。

但是在配置區中聲明監聽器不會讓您撥打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); 
); 
相關問題