`
caibinghong
  • 浏览: 150002 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

小谈Ext架构-理解Ext.util.Observable

 
阅读更多

 

理解Ext.util.Observable

Observable维护了一个events数组,并提供了更加方便的对于事件的封装和调用机制。同Event一样,它也提供了addListenerremoveListener方法。它提供的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;
  }
  //
调用eventaddListener方法
  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);
    }
  },


为了方便使用,observableaddListenerremoveListener提供了一个更加简洁的所写:onun
Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;

你可以通过suspendEventsresumeEvents方法随时对于事件进行暂停和继续:
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
还通过capturereleaseCapture提供了对于事件处理函数的拦截机制:
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;
};

分享到:
评论

相关推荐

    Ext+JS深入浅出.pdf

    - **Ext.util.Observable**:用于观察对象的变化,是Ext JS中实现事件驱动的核心。 - **Ext.EventManager**:用于管理事件监听器。 - **Ext.EventObject**:封装了事件对象,提供了一系列方法来处理事件。 - **...

    Ext API详解--笔记

    `EXT核心API详解(一) - Ext类.txt`介绍了Ext的基础类,包括`Ext.util.Observable`(观察者模式的实现)、`Ext.app.Application`(管理应用生命周期)等。理解这些类的用法对于构建可维护的应用至关重要。 4. **Ext...

    Ext Js权威指南(.zip.001

    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....

    Extjs4 API文档阅读(一)——类系统(Class System)

    - `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...

    Ext.plugins.TDGi.tabScrollerMenu插件的使用

    通过分析源码,我们可以看到它定义了一个名为`TDGi.tabScrollerMenu`的类,继承自`Ext.util.Observable`,并实现了与Ext JS TabPanel组件的集成。插件的核心方法包括初始化、添加和移除选项卡,以及处理下拉菜单的...

    ext+js深入浅出

    - **Ext.util.Observable**:这是一个核心类,实现了观察者模式,使得组件能够响应外部事件。 - **Ext.EventManager**:用于管理全局事件监听器,简化了事件的注册和解绑过程。 - **Ext.EventObject**:表示事件对象...

    深入浅出ExtJS第2版

    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 ...

    EXTJS4之类系统和编码规范

    - `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/...

    Extjs4_API文档

    - 示例:`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...

    ext事件模型

    通过本文对`ext事件模型`的介绍,我们了解了`Ext.lib.Event`和`Ext.util.Observable`这两个核心组件的功能与用法。掌握了这些知识,开发者就能够更加高效地处理页面中的各种事件,构建出更加强大和复杂的前端应用...

    Ext_类的详细介绍

    通过上述介绍,我们可以看出 **Ext.lib.Event** 和 **Ext.util.Observable** 在 ExtJS 库中分别承担着不同的职责,但都是处理事件的关键部分。理解这两个类的工作原理和使用方法对于高效地使用 ExtJS 开发复杂用户...

    ExtJs中简单的登录界面制作方法

    一 首先请看图片 二 登陆界面Ext代码 代码如下: /// ”... //主应用程序 XQH.ExtJs.Frame.app = function() { } Ext.extend(XQH.ExtJs.Frame.app, Ext.util.Observable, { LoginLogo:new Ext.

    4.0Ext 类系统

    例如,`Ext.util.Observable` 对应 `path/to/src/Ext/util/Observable.js`。 4. **方法和变量** 方法名和变量名也应遵循驼峰命名法,如 `encodeUsingMd5()` 和 `isGoodName`。 5. **静态属性** 对于常量,尤其是类的...

    老师整理的extjs学习笔记

    ExtJS 中的所有组件都继承自 `Ext.Component` 类,而 `Ext.Component` 又继承自 `Ext.util.Observable` 类。这意味着所有的组件都具有事件管理的能力。 **3.2 ExtJS 常用组件的继承关系及其管理** ExtJS 提供了...

    EXT 登录的设计 extjs4.0

    EXTJS中的 `Ext.util.Observable` 类提供了一套事件系统,允许你在组件间进行通信。 7. **验证(Validation)**:EXTJS 4.0 提供了强大的表单验证功能,可以通过 `Ext.form.field.VTypes` 或自定义验证函数确保用户...

    EXT扩展Htmleditor,在工具栏中添加插入图片按钮,可选择图片插入到编辑器中(也可添加其他功能按钮)

    1. 定义插件:首先,你需要创建一个EXT插件类,继承自`Ext.EditorPlugin`或`Ext.util.Observable`,并在构造函数中初始化按钮配置。 ```javascript Ext.ns('MyPlugins'); MyPlugins.ImageInsert = function(config)...

    精通JS脚本之ExtJS框架.part1.rar

    4.4.4 Ext.util.Observable事件 4.4.5 Ext.EventManager事件 4.4.6 Ext.EventObject事件 4.5 各种事件登记方式 4.5.1 传统式登记 4.5.2 内联式登记 4.5.3 Dom Level2登记 4.6 高级组件事件 4.7 ExtJS键盘...

    ExtJs 2.2 简明教程 02 基础知识

    - **Ext.util.Observable**:提供事件系统的基类,使得任何对象都可以监听和触发事件。 通过学习这些基础知识,开发者可以逐步掌握如何有效地构建和管理ExtJs应用。记得实践是检验理论的最好方式,结合实际项目...

Global site tag (gtag.js) - Google Analytics