ExtJs 类的设计
程序员文章站
2022-03-08 08:38:07
...
一、类的设计
JavsScript并没有提供一个自动的调用父类构造器的机制,所以必须通过属性superclass在构造器中显式调用父类。第一个参数总是this,以保证构造器工作在调用函数的作用域。
二、扩展Ext.Component
一个可重用模板
创建以上代码的实例:
属性propA将被设置3次,按顺序分别是1,2,3 。通过跟踪代码(和注释) ,你会发现初始值为1(构造缺省),然后通过用户配置对象设置为2,最后在initComponent方法中被覆盖设置成3.希望这个例子能让你稍微明白代码执行的顺序(而不是按照你读代码的顺序!)。
因为组件是其他组件的基础,所以下面代码是获取基础组件快捷方法。
附:
附件为 ext-2.2/examples/grid 下的例子。(注意几种继承方式的写法)
以上参考自:http://extjs.com/learn/Manual:Component:Extending_Ext_Components
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
上一篇: mysql 中文乱码 解决方法集锦
下一篇: 这个博客很奇怪