- 浏览: 92172 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
hzxlb910:
背景看的头晕
extJs 2.1学习笔记(Ext.data.JsonReader篇一) -
whyang:
先鄙视一下这个论坛,要做测试才能回复。
我是想问下楼主,
第 ...
Struts2的异常处理机制:
Ext架构分析(2)--理解Ext.util.Observable
原文链接 http://webtec.blog.ccidnet.com/blog-htm-do-showone-uid-77419-type-blog-itemid-246155.html
Observable维护了一个events数组,并提供了更加方便的对于事件的封装和调用机制。同Event一样,它也提供了addListener、removeListener方法。它提供的addListenere方法使用起来更加方便,你可以通过json对象一次实现多个事件的绑定:
foo.addListener({
'click' : {
fn: this.onClick,
scope: this,
delay: 100
},
'mouseover' : {
fn: this.onMouseOver,
scope: this
},
'mouseout' : {
fn: this.onMouseOut,
scope: this
}
})
如果你看一下源程序,你会发现,实际上,observable最终还是把事件绑定机制委托到Event对象上:
addListener : function(eventName, fn, scope, o){
//如果参数是一个json对象
if(typeof eventName == "object"){
o = eventName;
for(var e in o){
if(this.filterOptRe.test(e)){
continue;
}
if(typeof o[e] == "function"){
// shared options
this.addListener(e, o[e], o.scope, o);
}else{
// individual options
this.addListener(e, o[e].fn, o[e].scope, o[e]);
}
}
return;
}
o = (!o || typeof o == "boolean") ? {} : o;
eventName = eventName.toLowerCase();
var ce = this.events[eventName] || true;
if(typeof ce == "boolean"){
//事件不存在则新建一个Event对象并把它纳入event数组
ce = new Ext.util.Event(this, eventName);
this.events[eventName] = ce;
}
//调用event的addListener方法
ce.addListener(fn, scope, o);
}
除了支持addListener方法,Obserable还提供了一个addEvent方法,通过该方法,Observable可以绑定多个不包含处理句柄的Event对象:
addEvents : function(o){
if(!this.events){
this.events = {};
}
if(typeof o == 'string'){
for(var i = 0, a = arguments, v; v = a; i++){
if(!this.events[a]){
o[a] = true;
}
}
}else{
Ext.applyIf(this.events, o);
}
},
为了方便使用,observable对addListener和removeListener提供了一个更加简洁的所写:on和un:
Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
你可以通过suspendEvents和resumeEvents方法随时对于事件进行暂停和继续:
suspendEvents : function(){
this.eventsSuspended = true;
},
resumeEvents : function(){
this.eventsSuspended = false;
},
当然,通过fireEvent方法,你可以触发制定的事件:
fireEvent : function(){
if(this.eventsSuspended !== true){
//arguments[0]就是你需要触发的事件
var ce = this.events[arguments[0].toLowerCase()];
if(typeof ce == "object"){
return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
}
}
return true;
},
Observable还通过capture和releaseCapture提供了对于事件处理函数的拦截机制:
Ext.util.Observable.capture = function(o, fn, scope){
o.fireEvent = o.fireEvent.createInterceptor(fn, scope);
};
Ext.util.Observable.releaseCapture = function(o){
o.fireEvent = Ext.util.Observable.prototype.fireEvent;
};
原文链接 http://webtec.blog.ccidnet.com/blog-htm-do-showone-uid-77419-type-blog-itemid-246155.html
Observable维护了一个events数组,并提供了更加方便的对于事件的封装和调用机制。同Event一样,它也提供了addListener、removeListener方法。它提供的addListenere方法使用起来更加方便,你可以通过json对象一次实现多个事件的绑定:
foo.addListener({
'click' : {
fn: this.onClick,
scope: this,
delay: 100
},
'mouseover' : {
fn: this.onMouseOver,
scope: this
},
'mouseout' : {
fn: this.onMouseOut,
scope: this
}
})
如果你看一下源程序,你会发现,实际上,observable最终还是把事件绑定机制委托到Event对象上:
addListener : function(eventName, fn, scope, o){
//如果参数是一个json对象
if(typeof eventName == "object"){
o = eventName;
for(var e in o){
if(this.filterOptRe.test(e)){
continue;
}
if(typeof o[e] == "function"){
// shared options
this.addListener(e, o[e], o.scope, o);
}else{
// individual options
this.addListener(e, o[e].fn, o[e].scope, o[e]);
}
}
return;
}
o = (!o || typeof o == "boolean") ? {} : o;
eventName = eventName.toLowerCase();
var ce = this.events[eventName] || true;
if(typeof ce == "boolean"){
//事件不存在则新建一个Event对象并把它纳入event数组
ce = new Ext.util.Event(this, eventName);
this.events[eventName] = ce;
}
//调用event的addListener方法
ce.addListener(fn, scope, o);
}
除了支持addListener方法,Obserable还提供了一个addEvent方法,通过该方法,Observable可以绑定多个不包含处理句柄的Event对象:
addEvents : function(o){
if(!this.events){
this.events = {};
}
if(typeof o == 'string'){
for(var i = 0, a = arguments, v; v = a; i++){
if(!this.events[a]){
o[a] = true;
}
}
}else{
Ext.applyIf(this.events, o);
}
},
为了方便使用,observable对addListener和removeListener提供了一个更加简洁的所写:on和un:
Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
你可以通过suspendEvents和resumeEvents方法随时对于事件进行暂停和继续:
suspendEvents : function(){
this.eventsSuspended = true;
},
resumeEvents : function(){
this.eventsSuspended = false;
},
当然,通过fireEvent方法,你可以触发制定的事件:
fireEvent : function(){
if(this.eventsSuspended !== true){
//arguments[0]就是你需要触发的事件
var ce = this.events[arguments[0].toLowerCase()];
if(typeof ce == "object"){
return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
}
}
return true;
},
Observable还通过capture和releaseCapture提供了对于事件处理函数的拦截机制:
Ext.util.Observable.capture = function(o, fn, scope){
o.fireEvent = o.fireEvent.createInterceptor(fn, scope);
};
Ext.util.Observable.releaseCapture = function(o){
o.fireEvent = Ext.util.Observable.prototype.fireEvent;
};
发表评论
-
Extjs3.0的变动记录(转载)
2009-09-24 11:23 2999Release Date: Jul 6, 2009 Curr ... -
Ext中TreePanel控件和TabPanel控件搭配测试
2009-08-25 13:51 1657在实际的项目中,左边树形菜单,提供各种功能点击,右边一个面板, ... -
extJs 2.1学习笔记(Ext.Updater篇二)
2009-08-05 22:02 1621全 称:Ext.Updater 命名 ... -
extJs 2.1学习笔记(Ext.Updater篇一)
2009-08-05 22:00 1265上几篇中老老实实地把E ... -
extJs 2.1 学习笔记(Ext.data.HttpProxy篇)
2009-08-05 21:59 2518关于Ext.data中各个类的 ... -
extJs 2.1学习笔记(Ext.data.JsonReader篇一)
2009-08-05 21:58 2143有个事要说一下:DataProxy的子类呢,都有一个load来 ... -
extJs 2.1学习笔记(Ext.data.JsonReader篇二)
2009-08-05 21:57 1322有了上一篇中所讲内容,一般情况下就可以应付了,不过,Jso ... -
extJs 2.1学习笔记(Ext.TabPanel篇)
2009-08-05 21:56 1454Ext.TabPanel这个东西是最常用的组件之一,它继承 ... -
extJs 2.1学习笔记(Function扩展篇)
2009-08-05 21:55 1014ExtJs对JavaScript的内建对象进行了扩展,对什么O ... -
extJs 2.1学习笔记(Ext.data.Store篇)
2009-08-05 21:54 1565Ext.data.Store,这个东西是JavaScript ... -
extJs 2.1学习笔记(Ext.data.Connection篇二)
2009-08-05 21:54 1756上一篇主要是扎扎实实地翻译了一下Ext.data.Connec ... -
extJs 2.1学习笔记(Ext.data.Connection篇一)
2009-08-05 21:52 1436ExtJs之所以能异步请求数据,全依赖于Ext.data. ... -
extJs 2.0学习笔记(Ext.Panel终结篇)
2009-08-05 21:49 1201怪不得我对Ext.Panel穷追猛打,前面已经写过四篇针对它的 ... -
extJs 2.0学习笔记(事件注册总结篇)
2009-08-05 21:48 1173本来,我也没把这档子 ... -
extJs 2.0学习笔记(Ext.Panel篇四)
2009-08-05 21:46 1744我刚才禁不住诱惑去看 ... -
extJs 2.0学习笔记(Ext.Panel篇三)
2009-08-05 21:45 1943上一篇中把panel的config部分的文档翻译了一下,事实 ... -
extJs 2.0学习笔记(Ext.Panel篇二)
2009-08-05 21:44 1414activeItem : String/Number 用 ... -
extJs 2.0学习笔记(Ext.Panel篇一)
2009-08-05 21:42 1265原文链接: http://hi.baidu ... -
EXT 中 类的继承
2009-07-31 09:36 1024深入剖析ExtJS 2.2实现及 ... -
Ext架构分析:render方法
2009-07-16 08:51 5096Ext架构分析(3)--Widget之 ...
相关推荐
`EXT核心API详解(一) - Ext类.txt`介绍了Ext的基础类,包括`Ext.util.Observable`(观察者模式的实现)、`Ext.app.Application`(管理应用生命周期)等。理解这些类的用法对于构建可维护的应用至关重要。 4. **Ext...
- 示例:`Ext.util.Observable` 存放在 `path/to/src/Ext/util/Observable.js`。 - `Ext.form.action.Submit` 存放在 `path/to/src/Ext/form/action/Submit.js`。 - `MyCompany.chart.axis.Numeric` 存放在 `path...
5.3.2 为组件添加事件接口:ext.util.observable / 188 5.3.3 为组件绑定事件 / 189 5.3.4 内部事件的触发过程 / 192 5.3.5 移除事件 / 194 5.4 特定功能的事件对象 / 196 5.4.1 延时任务:ext.util....
- `Ext.util.Observable` 存放在 `path/to/src/Ext/util/Observable.js` - `Ext.form.action.Submit` 存放在 `path/to/src/Ext/form/action/Submit.js` - `MyCompany.chart.axis.Numeric` 存放在 `path/to/src/My...
通过分析源码,我们可以看到它定义了一个名为`TDGi.tabScrollerMenu`的类,继承自`Ext.util.Observable`,并实现了与Ext JS TabPanel组件的集成。插件的核心方法包括初始化、添加和移除选项卡,以及处理下拉菜单的...
通过上述介绍,我们可以看出 **Ext.lib.Event** 和 **Ext.util.Observable** 在 ExtJS 库中分别承担着不同的职责,但都是处理事件的关键部分。理解这两个类的工作原理和使用方法对于高效地使用 ExtJS 开发复杂用户...
通过本文对`ext事件模型`的介绍,我们了解了`Ext.lib.Event`和`Ext.util.Observable`这两个核心组件的功能与用法。掌握了这些知识,开发者就能够更加高效地处理页面中的各种事件,构建出更加强大和复杂的前端应用...
- **Ext.util.Observable**:用于观察对象的变化,是Ext JS中实现事件驱动的核心。 - **Ext.EventManager**:用于管理事件监听器。 - **Ext.EventObject**:封装了事件对象,提供了一系列方法来处理事件。 - **...
1. 定义插件:首先,你需要创建一个EXT插件类,继承自`Ext.EditorPlugin`或`Ext.util.Observable`,并在构造函数中初始化按钮配置。 ```javascript Ext.ns('MyPlugins'); MyPlugins.ImageInsert = function(config)...
- `Ext.util.Observable` 存储在 `path/to/src/Ext/util/Observable.js`。 - `Ext.form.action.Submit` 存储在 `path/to/src/Ext/form/action/Submit.js`。 - `MyCompany.chart.axis.Numeric` 存储在 `path/to/...
例如,`Ext.util.Observable` 对应 `path/to/src/Ext/util/Observable.js`。 4. **方法和变量** 方法名和变量名也应遵循驼峰命名法,如 `encodeUsingMd5()` 和 `isGoodName`。 5. **静态属性** 对于常量,尤其是类的...
- **文件路径**:例如,`Ext.util.Observable`将存储在`path/to/src/Ext/util/Observable.js`中。 ##### 2.3 方法和变量 - **命名规范**:方法名和变量名只能包含字母和数字。同样地,建议遵守驼峰命名法。 - **首...
例如,使用`Ext.util.Observable.capture`方法可以捕获并控制事件的传播,但如果`handler`已定义,它可能不会受到`capture`方法的影响。 3. **对比与应用场景** - `handler`是`listener`的一个特殊形式,更适用于...
2. Ext.util.Observable:观察者模式实现,用于事件监听和触发。 3. Ext.data.Store:数据存储,与数据源进行交互,支持远程数据加载和本地数据存储。 4. Ext.grid.GridPanel:表格组件的主要类,包含了数据绑定、列...
- `Ext.util.Observable`类提供事件机制,可以声明并监听自定义事件。如`Person`类声明了`"namechange"`和`"sexchange"`事件,并通过`fireEvent()`方法发布这些事件。 - 使用`on()`方法监听事件,如`_person.on(...
EXTJS中的 `Ext.util.Observable` 类提供了一套事件系统,允许你在组件间进行通信。 7. **验证(Validation)**:EXTJS 4.0 提供了强大的表单验证功能,可以通过 `Ext.form.field.VTypes` 或自定义验证函数确保用户...
4. `Ext.util.Observable` `Observable`类是Ext事件模型的基础,它提供了一种方式来监听和响应对象上的事件。任何Ext组件都继承自`Observable`,可以通过`on`、`un`等方法来管理事件。`Observable`还支持事件拦截器...
10. **事件系统**:Ext.util.Observable是所有可观察对象的基类,提供了事件监听和触发机制,是实现组件间通信的关键。 11. **国际化支持**:Ext 3.0 提供了本地化支持,允许开发者轻松地将应用翻译成不同语言。 ...
2.1.4 Ext.util.Observable 14 2.1.5 Ext.EventManager 17 2.1.6 Ext.EventObject 19 2.2 EXT的核心组件 20 2.2.1 Ext.Component 20 2.2.2 Ext.BoxComponent 22 2.2.3 Ext.Container 23 2.2.4 Ext.Panel 24 ...