在用EXT的过程中,有时会自定义封装一些对象,为了让这个对象有事件处理的能力,简便起见,往往会让这个对象继承Ext.util.Observable事件对象。便在使用的过程中,要注意一个问题,具体如下:
一、问题代码
Ext.namespace("js.main");
var x = js.main;
x.Test = function(_cfg){
this.list = [];
Ext.apply(this,_cfg || {});
this.addEvents("onSuccess");
};
x.Test.prototype.write = function(_arg){
document.writeln(_arg);
};
x.Test.prototype.testA = function(){
this.write("this->list.length: "+this.list.length);
};
Ext.extend(x.Test,Ext.util.Observable);
这段代码,初看上去,没有问题,但当实例出一个Test对象,调用testA方法时,会出现此方法没有定义的问题。
看了其它EXT组件继承观察者事件对象才知道,问题的原因应该出现在,当自定义的对象继承observable时,已经破坏了原始Test对象的原始链,好在此种继承机制提供了一种修复的方式,如接下来所示。
二、正确代码
Ext.namespace("js.main.Test");
var x = js.main;
x.Test = function(_cfg){
this.list = [];
Ext.apply(this,_cfg || {});
this.addEvents("onSuccess");
};
Ext.extend(x.Test,Ext.util.Observable,{
write : function(_arg){
document.writeln(_arg);
},
testA : function(){
this.write("u-------this->list.length: "+this.list.length);
this.fireEvent("onSuccess");
}
});
一、问题代码
Ext.namespace("js.main");
var x = js.main;
x.Test = function(_cfg){
this.list = [];
Ext.apply(this,_cfg || {});
this.addEvents("onSuccess");
};
x.Test.prototype.write = function(_arg){
document.writeln(_arg);
};
x.Test.prototype.testA = function(){
this.write("this->list.length: "+this.list.length);
};
Ext.extend(x.Test,Ext.util.Observable);
这段代码,初看上去,没有问题,但当实例出一个Test对象,调用testA方法时,会出现此方法没有定义的问题。
看了其它EXT组件继承观察者事件对象才知道,问题的原因应该出现在,当自定义的对象继承observable时,已经破坏了原始Test对象的原始链,好在此种继承机制提供了一种修复的方式,如接下来所示。
二、正确代码
Ext.namespace("js.main.Test");
var x = js.main;
x.Test = function(_cfg){
this.list = [];
Ext.apply(this,_cfg || {});
this.addEvents("onSuccess");
};
Ext.extend(x.Test,Ext.util.Observable,{
write : function(_arg){
document.writeln(_arg);
},
testA : function(){
this.write("u-------this->list.length: "+this.list.length);
this.fireEvent("onSuccess");
}
});