zzbo

唏嘘的感慨一年年。。。

Extjs4.2或以上 使用自定义事件时报错问题

最近使用了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');

 

posted on 2016-04-13 15:35  zzbo  阅读(675)  评论(0编辑  收藏  举报

导航