欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ExtJs 类的设计

程序员文章站 2022-03-08 08:17:07
...
   一、类的设计
    JavsScript并没有提供一个自动的调用父类构造器的机制,所以必须通过属性superclass在构造器中显式调用父类。第一个参数总是this,以保证构造器工作在调用函数的作用域。

MyNewClass = function(arg1, arg2, etc) {
	// 显示调用父类的构造函数
	MyNewClass.superclass.constructor.call(this, arg1, arg2, etc);
};

Ext.extend(MyNewClass, SomeBaseClass, {
	theDocument : Ext.get(document),
	myNewFn1 : function() {
		// etc
	},
	myNewFn2 : function() {
		// etc
	}
});


二、扩展Ext.Component
    一个可重用模板
MyComponent = Ext.extend(Ext.some.component, {
    //缺省构造参数,可被自定义设置覆盖
    propA: 1,
 
    initComponent: function(){
       //在组件初始化期间调用的代码
 
        //因为配置对象应用到了“this”,所以属性可以在这里被覆盖,或者添加新的属性
        //(如items,tools,buttons)
        Ext.apply(this, {
            propA: 3
        });
 
       //调用父类代码之前        
 
        //调用父类构造函数(必须)
        MyComponent.superclass.initComponent.apply(this, arguments);
 
       //调用父类代码之后
        //如:设置事件处理和渲染组件
    },
 
    //覆盖其他父类方法
    onRender: function(){
 
        //调用父类代码之前
 
        //调用父类相应方法(必须)
        MyScope.superclass.onRender.apply(this, arguments);
 
        //调用父类代码之后
 
    }
});
 
//注册成xtype以便能够延迟加载
Ext.reg('mycomponentxtype', MyComponent);

    创建以上代码的实例:
var myComponent = new MyComponent({
    propA: 2
});
//或者延迟加载:
{..
  items: {xtype: 'mycomponentxtype', propA: 2}
..}

属性propA将被设置3次,按顺序分别是1,2,3 。通过跟踪代码(和注释) ,你会发现初始值为1(构造缺省),然后通过用户配置对象设置为2,最后在initComponent方法中被覆盖设置成3.希望这个例子能让你稍微明白代码执行的顺序(而不是按照你读代码的顺序!)。

因为组件是其他组件的基础,所以下面代码是获取基础组件快捷方法。
var topCmp = (function(o){while(o.ownerCt){o=o.ownerCt} return o;})(this);



附:
附件为 ext-2.2/examples/grid 下的例子。(注意几种继承方式的写法)

以上参考自:http://extjs.com/learn/Manual:Component:Extending_Ext_Components
相关标签: EXT 工作