从Java的角度理解Ext的extend (四)

2014-11-24 03:19:37 · 作者: · 浏览: 2
nstructor

属性肯定指向的是Object,不是指向的Observable,这岂不是存在bug,我通过代码检测发现

alert(Ext.util.Observable.prototype.constructor == Ext.util.Observable);

的结果确实又是true,怎么回事呢?答案就在Ext.extend的那段防御性代码,大家回过去看看吧!

现在我们写一个继承Obervable的类,不过不是UI组件,而是一个领域模型,比如论坛帖子,它在被修改之后会跑出一个被修改的事件,监听器捕获这个事件将修改保存到数据库中,代码如下:

ForumThread = Ext.extend(Ext.util.Observable, {

constructor: function(config) {

this.name = config.name;

//把监听器放进超类的属性

this.listeners = config.listeners;

this.events = {"change" : true};

//给领域模型设置事件,通过上面的写法也可以

/* this.addEvents({

"change" : true

});*/

//调用超类构造超类不变量

ForumThread.superclass.constructor.call(this, config)

},

//领域行为,会触发事件

changeName : function(newName) {

alert("原主题名字是:" + this.name);

this.name = newName;

alert("更改后主题名字是:" + this.name);

this.fireEvent("change", this);//触发事件

}

});

Ext.onReady(function() {

var forumThread = new ForumThread({

name : '关于将Jdon框架提升为DCI框架的设想',

//构造领域模型时注入监听处理程序

listeners : {

change : function(thread) {

alert('接受到事件,将异步保存新的名字:' + thread.name);

}

}

});

//领域行为调用

forumThread.changeName("关于将Jdon框架提升为DCI框架的设想,整合JdonMVC");

});

摘自 Adley