【ExtJS】关于constructor、initComponent、beforeRender
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的更多相关文章
- [Ext JS 4] Extjs 它 initComponent 和 constructor差分
initComponent 和 constructor是什么 Extjs 提供的组件还是挺丰富的, 可是有时候需求更丰富. 当Extjs 原生的组件无法实现我们的要求的时候, 就须要扩展Extjs 的 ...
- ExtJS4中initComponent和constructor的区别
Ext的define方法参数类型define( String className, Object data, Function createdFn ) 创建自定义类时,先构造(constructor) ...
- 解决ExtJs Uncaught TypeError: c is not a constructor错误
ExtJs项目使用sencha app build编译以后,浏览时很容易抛出Uncaught TypeError: c is not a constructor的错误,而且会加载没有名称的js,例如 ...
- ExtJS关于组件Component生命周期
extjs组件生命周期大体分为3个阶段:初始化.渲染.销毁. 第一阶段:初始化 初始化工作开始于组件的诞生,所有必须的配置设定.事件注册.预渲染处理等都在此时进行. 1.应用组件的配置: 当初始化一个 ...
- 【ExtJS】关于Component生命周期
很久以前就学习过extjs的组件生命周期,很久之后,再回头看一看,又增加好多新的认识. extjs组件生命周期大体分为3个阶段:初始化.渲染.销毁. 第一阶段:初始化 初始化工作开始于组件的诞生,所有 ...
- ExtJS笔记5 Components
参考 :http://blog.csdn.net/zhangxin09/article/details/6914882 An Ext JS application's UI is made up of ...
- ExtJs MVC应用架构示例
项目目录结构 (源码)2. app.js Ext.Loader.setConfig({ enabled : true, paths : { 'Ext' : 'extjs', 'App' : 'app' ...
- 在开发 ExtJS 应用程序常犯的 10 个错误
这是 CNX 公司在开发 ExtJS 项目中总结的需要特别注意的 10 个地方.有时候,我们完全是自己使用 ExtJS 从零开始构建的新的应用程序,但有时候我们的客户会要求我们使用他们自己的代码,并且 ...
- ExtJS学习(一)Ext自定义类实现
工作中项目需要extjs,所以学习一下,做个笔记防止遗忘了.以后回忆起来也方便. 首先下载extjs官网地址:http://extjs.org.cn/ 下载以后的目录结构: 先写一个入门的程序吧自定义 ...
随机推荐
- Tomcat之——内存溢出设置JAVA_OPTS
答案1设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置三.实例,以下 ...
- C# return、continue、break
return 终止当前进程 可用循环判断,验证,等功能 if (ew == v) { PublicControlLib.Class.PublicProperties.ShowSuccess(); re ...
- EF 完成指定数据迁移
Update-Database -ConfigurationTypeName Bmw.Services.DealerService.WebApiHost.MigrationsOfDealerDB.De ...
- android android遇到的错误
android遇到的错误 一.eclipse运行.生成.打包APK报错: 原因1: jdk版本太低,升级jdk 原因2: tools选择: android sdk build-tools 大于等于2 ...
- Android app如何加密?
欢迎访问网易云社区,了解更多网易技术产品运营经验. Android App包含的内容有dex文件,so文件,res,assets资源文件.对应的加密按此内容分为三大方面:dex保护.so加密.资源保护 ...
- 201621123012 《Java程序设计》第1周学习总结
1. 本章学习总结 学习了java的理论知识和它与C语言的差别,什么是JVM,区分JRE与JDK并学习JAVA环境的安装.熟悉控制台下的常用命令,java函数的编写.熟练使用编写JAVA所需要的工具( ...
- loj #2509. 「AHOI / HNOI2018」排列
#2509. 「AHOI / HNOI2018」排列 题目描述 给定 nnn 个整数 a1,a2,…,an(0≤ai≤n),以及 nnn 个整数 w1,w2,…,wn.称 a1,a2,…,an 的 ...
- JDBC_ResultSet结果集用法_游标原理_关闭连接问题
依次关闭使用对象及连接 ResultSet---Statement--Connectionimport java.sql.Connection;import java.sql.DriverManage ...
- CBoard 汉化以及元数据存储配置
汉化配置如图位置: 元数据存储配置为Mysql数据库的位置 版权声明:本文为博主原创文章,需要转载请注明出处. [置顶]Cboard 系列随笔
- Android SharedPreferences应用实例(记录App的使用次数)
1.介绍 2.使用方法 3.java后台 package com.lucky.test46sharedpreferences_apply; import android.content.SharedP ...