我试图在同一个侦听器中添加两个函数,以便能够组合两个组合的值,禁用两个字段,并根据它选择的值启用它们。这是我创建的听众:
listeners: {
render: function() {
var pago = this;
pago.onChangeCuentasFn();
pago.onChangeFormaPagoFn();
}
}
这些是Listener调用的函数:
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 :(得分:1)
Observable
方法addListener
它在行为上是累积的。这意味着如果一个人调用它,那么第二个处理程序将按时间顺序执行。
如果
instance.addListener(eventName, handler1, scope1)
和
instance.addListener(eventName, handler2, scope2)
当eventName
被解雇时
执行handler1
然后执行handler2
(如果handler1没有故意停止事件传播或返回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);
);