2017-03-10 12 views
0

2つのフィールドを使用して2つの値を組み合わせ、選択した値に応じて有効にするには、同じリスナー内に2つの関数を追加しようとしています。これは私が作成したリスナーです:単一の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種類の支払い方法のドロップダウンが含まれています。それから私は2つのフィールドを無効にしています。私が1つの支払い方法を選択すると、どちらか一方が有効になります。この場合、彼らは支払い3と4の形式です。しかし、私がどちらかを選ぶと、どちらか一方のみがロックされます。もう一つのステップ。あなたはコンボコードを見る必要がありますか? – Bufank85

答えて

1

Observable方法addListenerこれは動作が累積しています。つまり、ハンドラーを2回呼び出すと、ハンドラーのbthが時間順に処理されます。 (handler1が意図的STOPEイベント伝播をdoes'nまたはfalseを返す場合) instance.addListener(eventName, handler1, scope1) AND instance.addListener(eventName, handler2, scope2)eventNameが発射されると handler1を実行した後、handler2なった場合は実行されます。

しかし、設定ゾーンでリスナーを宣言しても、addListenerを2回呼び出すことはできません。そこでは暗黙の呼び出しをしたように使用できますが、スコープと引数は保持しません(そうでない場合)。または、ハンドラを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); 
); 
関連する問題