ExtJS提供的组件非常丰富,不过当原生的组件无法满足要求时,就需要扩展原生自定义组件了。

  initComponent 和 constructor 就是Extjs 提供用来实现继承和扩展的方式。

  在Extjs 中使用Ext.define来实现扩展, initComponent 和 constructor的使用方式类似:

 Ext.define('My.panel.Panel', {
extend : 'Ext.panel.Panel',
initComponent : function() {
//do something
},
constructor : function() {
//do something
}
});

  一般状况上,加上 xtype 的定义, 类似:

 Ext.define('My.panel.Panel', {
extend : 'Ext.panel.Panel',
xtype: 'myPanel',
initComponent : function() {
//do something
},
constructor : function() {
//do something
}
});

  initComponent这个方法是在Ext.Component的构造函数(constructor)中调用的,只有直接或间接继承自 Ext.Component的类才会在constructor里调用initComponent方法。

  自定义类中的 initComponent 函数中必须调用 callParent();否则 调用者无法初始化这个对象。

  针对button 这样的扩展组件来说,自定义类中的  constructor ,需要调用callParent( arguments);否则 调用者无法初始化这个对象。

  在下面的例子中:

 Ext.define('My.form.Panel',{
extend: 'Ext.panel.Panel',
xtype: 'form-panel', title: 'form-panel',
width: 400,
height: 300, defaultType: 'textfield', items: [{
allowBlank: false,
fieldLabel: 'Name:',
name: 'name',
emptyText: 'Name ID'
},{
allowBlank: false,
fieldLabel: 'Password:',
name: 'password',
emptyText: 'password',
inputType: 'password'
},{
xtype: 'checkbox',
fieldLabel: 'Sex',
}],
buttons: [{
text: 'OK'
},{
text: 'Cancel'
}], constructor: function(){
this.renderTo = Ext.getBody();
this.callParent(arguments);
Ext.Msg.alert('constructor','Constructor!');
}, initComponent: function(){
Ext.Msg.alert('InitComponent','InitComponent!');
var me = this;
me.defaults = {
anchor: '100%',
labelWidth: 100 };
me.callParent(); }, beforeRender: function(){
Ext.Msg.alert('beforRender','beforerender!');
this.callParent();
}
}) Ext.onReady(function(){
Ext.create('My.form.Panel').show(); })

  对容器的renderTo一般写在constructor中,如果写在initComponent中,则配置对象为容器内的几个组件。

  而对于容器内的几个组件的默认配置,则一般写在initComponent内。

  通过分别在constructor、initComponent、beforeRender中加入输出语句实验发现,三者的调动顺序为constructor --> beforeRender --> initComponent。

  通过对ExtJS的生命周期的了解,在初始化阶段,首先调用了构造器constructor,一般从  Component 继承下来的类并不需要提供(通常没有提供)一个独立的构造器。然后是各种事件的创建以供各组件的调用,随后是 ComponentMgr 中注册组件实例,从而可以通过 Ext.getCmp 被获得实例引用,然后调用initComponent 方法,这是一个最重要的初始化步骤,它是做为一个模板方法,子类可以按需要重写这个方法。最后呈现阶段, 如果有配置 renderTo 或 applyTo,组件会马上被呈现输出,否则,它会被延迟输出,直
到组件被显式调用显示,或被它的容器所调用输出。而beforeRender是在组件渲染 rendered之前触发,一般扩展的新组件与元素的初始化配置,就写在beforeRender内。

【ExtJS】关于constructor、initComponent、beforeRender的更多相关文章

  1. [Ext JS 4] Extjs 它 initComponent 和 constructor差分

    initComponent 和 constructor是什么 Extjs 提供的组件还是挺丰富的, 可是有时候需求更丰富. 当Extjs 原生的组件无法实现我们的要求的时候, 就须要扩展Extjs 的 ...

  2. ExtJS4中initComponent和constructor的区别

    Ext的define方法参数类型define( String className, Object data, Function createdFn ) 创建自定义类时,先构造(constructor) ...

  3. 解决ExtJs Uncaught TypeError: c is not a constructor错误

    ExtJs项目使用sencha app build编译以后,浏览时很容易抛出Uncaught TypeError: c is not a constructor的错误,而且会加载没有名称的js,例如 ...

  4. ExtJS关于组件Component生命周期

    extjs组件生命周期大体分为3个阶段:初始化.渲染.销毁. 第一阶段:初始化 初始化工作开始于组件的诞生,所有必须的配置设定.事件注册.预渲染处理等都在此时进行. 1.应用组件的配置: 当初始化一个 ...

  5. 【ExtJS】关于Component生命周期

    很久以前就学习过extjs的组件生命周期,很久之后,再回头看一看,又增加好多新的认识. extjs组件生命周期大体分为3个阶段:初始化.渲染.销毁. 第一阶段:初始化 初始化工作开始于组件的诞生,所有 ...

  6. ExtJS笔记5 Components

    参考 :http://blog.csdn.net/zhangxin09/article/details/6914882 An Ext JS application's UI is made up of ...

  7. ExtJs MVC应用架构示例

    项目目录结构 (源码)2. app.js Ext.Loader.setConfig({ enabled : true, paths : { 'Ext' : 'extjs', 'App' : 'app' ...

  8. 在开发 ExtJS 应用程序常犯的 10 个错误

    这是 CNX 公司在开发 ExtJS 项目中总结的需要特别注意的 10 个地方.有时候,我们完全是自己使用 ExtJS 从零开始构建的新的应用程序,但有时候我们的客户会要求我们使用他们自己的代码,并且 ...

  9. ExtJS学习(一)Ext自定义类实现

    工作中项目需要extjs,所以学习一下,做个笔记防止遗忘了.以后回忆起来也方便. 首先下载extjs官网地址:http://extjs.org.cn/ 下载以后的目录结构: 先写一个入门的程序吧自定义 ...

随机推荐

  1. 获取服务端https证书 - Java版

    接上篇,用java代码实现一下获取远程服务端证书,还是拿新浪首页测试,上代码: package org.test; import java.net.URL; import java.security. ...

  2. NSRange 范围

    前言 结构体,这个结构体用来表示事物的一个范围,通常是字符串里的字符范围或者集合里的元素范围. typedef struct _NSRange { NSUInteger location; // 表示 ...

  3. scrapy 调试功能

    在使用 scrapy 来爬取网页的时候,我们难免会使用到调试功能,下面介绍两种调试方法: 1.终端使用 scrapy shell exampleurl exampleurl 为你要爬取网站的 url ...

  4. 题解 P2863 【[USACO06JAN]牛的舞会The Cow Prom】

    题目链接 赤裸裸的板子,就加一个特判就行.直接上代码 #include<stdio.h> #include<algorithm> #include<iostream> ...

  5. loj #2509. 「AHOI / HNOI2018」排列

    #2509. 「AHOI / HNOI2018」排列   题目描述 给定 nnn 个整数 a1,a2,…,an(0≤ai≤n),以及 nnn 个整数 w1,w2,…,wn.称 a1,a2,…,an 的 ...

  6. C++_友元3-其他友元关系

    友元和类的关系还可以更复杂. 举个例子,假设出现了交互式遥控器,交互式遥控器能够让您回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声. 这个例子的问题,可以使用新的友元关系来解决.我把它 ...

  7. fluent中UDF环境变量问题的三种解决方法

    方法一: 这种方式最简便,首选这种,但是有时会因为不明原因而不好使,我自己电脑刚开始用这种方式是行得通的,但是后来中途装过很多乱七八糟的软件,估计环境变量改乱了,这时候只能用第二种或者第三种方法.先说 ...

  8. Codeforce-1106-D. Lunar New Year and a Wander(DFS遍历+vector存图+set)

    Lunar New Year is approaching, and Bob decides to take a wander in a nearby park. The park can be re ...

  9. C#基础语法(二)

    四.CTS类型 C#认可的基本预定义类型并没有内置于C#语言中,而是内置于.NET Framework中. 例如,在C#中声明一个int类型的数据时,声明的实际上是.NET结构System.Int32 ...

  10. HDU 5938 Kingdom of Obsession(数论 + 二分图匹配)

    题意: 给定S,N,把S+1,S+2,...S+N这N个数填到1,2,...,N里,要求X只能填到X的因子的位置.(即X%Y=0,那么X才能放在Y位置) 问是否能够放满. 分析:经过小队的分析得出的结 ...