`
js-code
  • 浏览: 95157 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

ExtJs Extend的学习

阅读更多
学习和使用extjs也一段时间了,在这里把学习ext中extend的总结写下来,方便以后查阅,也希望为像我这样的学习者有所帮助,废话少说,开始了;
1 ext 1.x中的extend:
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.
  }
});

下面在贴一段详细的代码,详细信息查看http://extjs.com/learn/Manual:Intro:Inheritance
// 创建新类的构造器
Ext.ResizableConstrained = function(el, config){
    Ext.ResizableConstrained.superclass.constructor.call(this, el, config);
};
 
// 继承父类(基类)
Ext.extend(Ext.ResizableConstrained, Ext.Resizable, {
    setXConstraint : function(left, right){
        // Obtain a reference to parent dd property and setXConstraint
        this.dd.setXConstraint(left, right);
    },
 
   setYConstraint : function(up, down){
     // Obtain a reference to parent dd property and setYConstraint
     this.dd.setYConstraint(up, down);
   }
});
 
// 创建新类的实例
var myResizable = new Ext.ResizableConstrained('resize-el', {
   width: 200,
   height: 75,
   minWidth:100,
   minHeight:50, 
   maxHeight:150, 
   draggable:true
});
 
// 调用新类中的方法
myResizable.setYConstraint(0,300);
myResizable.setXConstraint(0,300);

重写父类(基类)中的方法
MyClass = Ext.extend(Ext.SomeClass, {
    someFunction : function(arg1, arg2){
         // custom code
 
         // call base class
         MyClass.superclass.someFunction.call(this, arg1, arg2);
 
         // custom code
    }
);

2 ext 2.0中的extend:
下面以继承Ext.Component为例,详细查看:http://extjs.com/learn/Manual:Component:Extending_Ext_Components(Chinese)
2.1如果你所需的是定义一些自己的缺省类来重用(指的是这里和ExtJS社区作为预配置类),所有你所需要做的就是:
//定义组件Ext.some.component的预配置类MyComponent
MyComponent = Ext.extend(Ext.some.component, {
    myDefault1: '..',
    myDefault2: '..'
});
 
//注册成xtype以便延迟加载
Ext.reg('mycomponentxtype', MyComponent);

在以上示例中,Ext.extend()中的第二个参数对象包含的自定义参数可覆盖Ext.some.component中已经支持的缺省参数。

以上示例看上去较简单,但能够让你从程序中重构除去相当数量重复的代码,并生成可重用的对象。举个例子,你可以用预配置选项创建一个Ext.some.component的实例,代码如下:
var myComponent = new MyComponent();

或者通过你注册过的Component XType延迟加载,下面示例作为Panel的组件项:
{..
   items: [ {xtype: 'mycomponentxtype'} ]
..}

扩展Ext.Component的,主要关注的方法应是initComponent(),在the Component Life Cycle(组件生命周期)中扮演了首要角色,在你掌握了initComponent() 后,你可以继续研究其他重要的方法,如onRender(),使你能够扩展Ext_2_Overview#Rendering,onDestroy() 用来扩展Ext_2_Overview#Destruction
一个可重用模板
下面的模板可作为扩展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.希望这个例子能让你稍微明白代码执行的顺序(而不是按照你读代码的顺序!)。
分享到:
评论
3 楼 qq360205404 2011-09-23  
晕死               
2 楼 xiaofan_0204 2010-10-28  
难懂!
1 楼 ll_3581 2010-04-18  
有点晕

相关推荐

    ExtJS的extend(Ext Designer的使用)

    NULL 博文链接:https://lggege.iteye.com/blog/602587

    ExtJs-API详解学习文档资料

    ExtJs-API详解学习文档资料 ExtJs Extend的学习 ext学习笔记 ext js的讲解

    Extjs中使用extend(js继承) 的代码

    深入浅出Extjs>书 传统的js实现继承操作为: 一:定义一个父类 代码如下: var BaseClass = function(){ //….. }; BaseClass.prototype.someMethod = function(){ //….. }; BaseClass.prototype.overridenMethod = ...

    无废话ExtJs 系列教程十八[继承:Extend]

    NULL 博文链接:https://huiqinbo.iteye.com/blog/2219592

    Extjs4.0一些常见入门学习范例带注释详解

    extend : 'Ext.Window', title : 'welcome!', initComponent : function() { this.items = [{ xtype : 'textfield', name : 'tfName', fieldLabel : 'Enter your name' }], this.callParent(arguments); } }); var ...

    EXTJS5 实现一个只能选择年月的控件

    extend: 'Ext.form.field.Date', alias: 'widget.monthpicker', ................................................ //注意:Extjs5 需要此语句,否则会出现选不中的BUG //start--------------- afterrender :...

    ExtJs原生批量上传+实时进度

    ExtJs原生批量上传 + 实时进度 Ext.define('MyApp.ux.upload.UploadWindow', { extend: 'Ext.window.Window', height: 400, width: 700, title: '文件上传', closeAction: 'hide', maximizable: true, ...

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

    14.1 利用Ext.extend实现继承 14.2 与ExtJS扩展相关的预备知识 14.2.1 定义命名空间 14.2.2 使用xtype 14.3 用户扩展和插件 14.3.1 编写自定义用户扩展 14.3.2 常用插件UploadDialog 14.3.3 常用插件...

    jquery 插件开发 extjs中的extend用法小结

    在jquery中,extend其实在做插件时还是用的比较多的,今天同时小结jquery和ext js中 的extend用法,先来看jquery中的。 1) extend(dest,src1,src2,src3…); 代码如下: var start = { id: 123, count: 41, desc: ...

    Extjs Grid 扩展实例

    一个功能完整的增删改查Extjs Grid 扩展实例.

    extjs-desktop

    MyDesktop.Test = Ext.extend(Ext.app.Module, { id:'bb-cc',//DIV中的ID值 init : function(){ this.launcher = { text: 'abcdefg',//菜单中显示的文本 iconCls:'tabs', handler : this.createWindow, ...

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

    14.1 利用Ext.extend实现继承 14.2 与ExtJS扩展相关的预备知识 14.2.1 定义命名空间 14.2.2 使用xtype 14.3 用户扩展和插件 14.3.1 编写自定义用户扩展 14.3.2 常用插件UploadDialog 14.3.3 常用插件...

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

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

    extjs4---job10和job11

    测试EXTJS4中的特性:config, extend, statics, mixins。 测试EXTJS自定义事件:当恐怖分子(Terrorist)在火车站掏刀时,触发一个砍人事件。警察将抓捕他。 群众(Person)看到砍人吓坏了。

    extjs-node:在NodeJS上运行的ExtJS4

    完整的库,包括一个可以在NodeJS上运行的适配器 不需要DOM 使用原始的Ext.require函数(工作依赖系统) 安装:npm install ... extend : "Ext.data.Model" , fields : [ 'name' ] , proxy : { type : 'memory'

    extjs图形绘制之饼图实现方法分析

    extend: 'Ext.panel.Panel', autoScroll : true, initComponent: function () { var me = this; me.store = me.createStore(); me.grid = me.getGridPanel(); me.mainPanel = Ext.create('Ext.p

    extjs4图表绘制之折线图实现方法分析

    本文实例讲述了extjs4图表绘制之折线图实现方法。... extend: 'Ext.panel.Panel', autoScroll : true, selectYear:null,//定义年份 initComponent: function () {//定义初始化组件 var me = this; me.sto

    自定义ExtJS控件之下拉树和下拉表格附

    下面是下拉树的代码: 代码如下: Ext.define(‘ComboTreeBox’,{ extend : ‘Ext.form.field.ComboBox’, multiSelect : true, createPicker : function(){ var me = this; //创建树控件 var picker = Ext.create(...

Global site tag (gtag.js) - Google Analytics