在用EXT的过程中,有时会自定义封装一些对象,为了让这个对象有事件处理的能力,简便起见,往往会让这个对象继承Ext.util.Observable事件对象。便在使用的过程中,要注意一个问题,具体如下:
一、问题代码
Ext.namespace("js.main");
var x = js.main;
x.Test = function(_cfg){
this.list = [];
Ext.apply(this,_cfg || {});
this.addEvents("onSuccess");
};
x.Test.prototype.write = function(_arg){
document.writeln(_arg);
};
x.Test.prototype.testA = function(){
this.write("this->list.length: "+this.list.length);
};
Ext.extend(x.Test,Ext.util.Observable);
这段代码,初看上去,没有问题,但当实例出一个Test对象,调用testA方法时,会出现此方法没有定义的问题。
看了其它EXT组件继承观察者事件对象才知道,问题的原因应该出现在,当自定义的对象继承observable时,已经破坏了原始Test对象的原始链,好在此种继承机制提供了一种修复的方式,如接下来所示。
二、正确代码
Ext.namespace("js.main.Test");
var x = js.main;
x.Test = function(_cfg){
this.list = [];
Ext.apply(this,_cfg || {});
this.addEvents("onSuccess");
};
Ext.extend(x.Test,Ext.util.Observable,{
write : function(_arg){
document.writeln(_arg);
},
testA : function(){
this.write("u-------this->list.length: "+this.list.length);
this.fireEvent("onSuccess");
}
});
分享到:
相关推荐
- 观察者模式是事件处理的一种实现,允许对象订阅(监听)其他对象的特定事件,并在事件发生时执行回调函数。 - `Ext.EventObservable`是所有可观察对象的基类,如组件、Store等,它们都实现了观察者模式。 - ...
1. **事件系统**:Ext的事件系统是基于观察者模式的,它允许对象之间通过事件进行通信。事件可以是用户交互(如点击按钮),也可以是程序内部状态变化(如数据加载完成)。 2. **监听和触发**:在Ext中,你可以使用...
- **Ext.EventObject**:表示事件对象,提供了关于事件的详细信息,如事件类型、目标元素等。 ##### 2.2 EXT的核心组件 **EXTJS**提供了一套丰富的UI组件库,这些组件构成了其核心框架。 - **Ext.Component**:这...
4.1 设计模式——观察者模式 4.2 自定义事件 4.3 浏览器事件 4.4 ExtJS中的事件 4.4.1 Function.call()/apply()方法 4.4.2 函数的作用域 4.4.3 Ext.lib.Event事件 4.4.4 Ext.util.Observable事件 4.4.5 Ext....
- **Ext.EventObject**:封装了事件对象,提供了一系列方法来处理事件。 - **核心组件**: - **Ext.Component**:所有UI组件的基础类,提供了基本的属性和方法。 - **Ext.BoxComponent**:继承自`Ext.Component`...
4.1 设计模式——观察者模式 4.2 自定义事件 4.3 浏览器事件 4.4 ExtJS中的事件 4.4.1 Function.call()/apply()方法 4.4.2 函数的作用域 4.4.3 Ext.lib.Event事件 4.4.4 Ext.util.Observable事件 4.4.5 Ext....
在构建类系统时,开发者可能会用到工厂模式(用于创建对象的抽象接口)、观察者模式(用于事件驱动编程)等设计模式。 10. **工具和源码分析**: 标签中的“源码”提示我们可以直接查看Extjs的源代码,学习其内部...
- **Ext.Component** 类及其子类都继承自`Ext.util.Observable`,这使得所有组件都能够作为观察者使用。 - 开发者可以通过`addEvents`、`addListener`等方法为组件添加自定义事件以及注册监听器。 - **示例代码**: ...
10. **设计模式**:理解并能运用常见设计模式,如单例、工厂、观察者、装饰器、适配器等,它们是解决特定问题的成熟解决方案。 11. **Spring框架**:如果涉及到企业级开发,可能会考察Spring的核心特性,如依赖注入...
- 该类可能会继承自`MonoBehaviour`,使其可以附加到Unity3D中的游戏对象上,控制游戏对象的行为。 ### 5. 光照、材质和渲染 光照和材质是创建真实感3D环境的关键因素。文档中提到了与光照相关的几个关键字: - **...
MFC基于C++的面向对象特性,遵循设计模式如单例、工厂、观察者等。它将Windows API中的窗口、消息、线程等概念转换成C++类,如CWnd(窗口类)、CMessageMap(消息映射)和CWinThread(线程类)。这种抽象使得代码...
19. **设计模式**:掌握常用设计模式的原理和应用,如工厂方法模式、观察者模式等。 20. **Java NIO**:了解Java NIO的原理和应用。 21. **并发编程包**:深入理解`java.util.concurrent`包中的类和接口,如`...
3. `XQH.ExtJs.Frame.app`是一个主应用程序类,它继承自`Ext.util.Observable`,使其具有观察者模式的特性。 4. `LoginLogo`组件被定义为一个Panel,用于显示登录界面的Logo或标题。 5. `LoginForm`组件是一个...