最近使用了extjs 自定义事件模型,代码如下:
function Person(name) { this.name = name; this.addEvents('walk'); } Ext.extend(Person, Ext.util.Observable, { info: function() { return 'info:' + this.name; } }); var zzbo = new Person('zzbo'); zzbo.on('walk', function() { console.log('walk'); }); zzbo.fireEvent('walk');
以上代码在 extjs4.0 版本是完全没有问题的,但是我使用了extjs4.2版本。
运行后得到报错信息:
Uncaught TypeError: Cannot read property '_incr_' of undefined
然后我换到extjs6.0,据说6.0已经把 addEvents 废弃了,那么我把 this.addEvents('walk'); 这句代码删除掉,也报出同样的错误信息。
试用不同方式调试后发现,需要手动初始父类的构造函数,就可以解决问题。
this.superclass.constructor.apply(this, arguments);
即完整代码如下:
function Person(name) { this.name = name; this.addEvents('walk'); //ext 5.0或6.0 则不需要这句 this.superclass.constructor.apply(this, arguments); //手动初始化父类构造函数 } Ext.extend(Person, Ext.util.Observable, { info: function() { return 'info:' + this.name; } }); var zzbo = new Person('zzbo'); zzbo.on('walk', function() { console.log('walk'); }); zzbo.fireEvent('walk');