3. initComponent : function() { 4. //do something 5. },
6. constructor : function() { 7. //do something 8. } 9. });
一般状况上,加上 xtype 的定义,类似:
(在旧的Extjs 版本中使用 Ext.extend 实现扩展)
那么这两种用法究竟该如何使用?两者的使用又有什么差别呢?
initComponent 和 constructor区别于联系
1. initComponent这个方法是在Ext.Component的构造函数(constructor)中调用的【注意
2者的调用关系】,只有直接或间接继承自 Ext.Component的
类才会在constructor里调用initComponent方法
看一下 Ext.AbstractComponent的源码文件 src/AbstractComponent.js 在 constructor方法中调用了initComponent 2.
1)自定义类中的 initComponent 函数中必须调用 callParent();否则调用者无法初始化这个对象
2)针对button 这样的扩展组件来说,自定义类中的 constructor ,需要调用callParent( arguments);否则调用者无法初始化这个对象
[html] view plaincopy
1. this.callParent(arguments);
这里的arguments 是需要的。
(在Extjs 4 之前的版本中,可能会看到比较多的XXX.superclass.constructor.call 写法)
sencha 的官网中有一篇针对这两个区别的讨论:
http://www.sencha.com/forum/showthread.php?47210-constructor-Vs-initComponent
不过语法是基于Extjs 3 来讨论的,笔者觉得作用不是很大。
就笔者实际的开发经验来看,基本上使用initComponent 就可以达到开发的要求了。
9. 构造函数
http://blog.csdn.net/kaoa000/article/details/39337803
定义类的方法:define
对于Ext4.X版本来说,采用了新定义类的define方法,而不是延续旧版本的extend方法,那么对于定义一个新的类。我们来了解下define的使用。 Ext.define(classname,properties,callback); - classname:要定义的新类的类名 - properties:新类的配置对象
- callback:回调函数,当类创建完后执行该函数
对于Ext定义一个新的类,那么我们可以想象到,既然是利用Ext.define去创建类,那么创建的类一定是Ext所特有的类,不同于传统的javascript创建一个类,也就是说我们要对于define方法的第二个参数properties配置项进行配置,需要找到Ext对于类支持的API并进行配置
[javascript] view plaincopy
1. Ext.onReady(function(){ 2.
3. //在Ext中如何定义一个类:Ext.define(className,properties,callback) 4. Ext.define('Person',{
5. //这里是是对于这个类的一些配置信息(看Ext.Class的configs) 6. //config属性就是配置当前类的属性内容,并且会加上get和set方法 7. config:{ 8. name:'z3', 9. age:20 10. },
11. //自己定义的方法 12. say:function(){
13. alert('我是方法。。。'); 14. },
15. //给当前定义的类加一个构造器,目的就是为了初始化信息 16. constructor:function(config){ 17. var me = this;
18. for(var attr in config){ //循环显示传递进来的参数 19. alert(attr + ':' + config[attr]); 20. }
21. me.initConfig(config); //真正的初始化传递进来参数 22. } 23. }); 24.
25. var p = new Person(); 26. // alert(p.name); 27. // alert(p.age); 28. alert(p.getName()); 29. p.say(); 30.
31. var p1 = new Person({name:'li4',age:25}); 32. // alert(p.name); 33. // alert(p.age); 34. alert(p1.getName()); 35. p1.say(); 36.
37. //Ext.create 实例化一个对象
38. var p2 = Ext.create('Person',{ 39. name:'wang5', 40. age:40 41. });
42. alert(p2.getName()); 43. p2.say(); 44. });
对于configs: - extend:用于继承 - alias:类的别名
- alternateClassName:备用名,与alias差不多
- requires:需要使用到的类名数组,在动态加载时会根据该属性去下载类,注意需要的类是在当前类之前被加载
- uses:与requires类似但是被引用的类可以在该类之后才加载
- constructor:构造器属性,一般用来初始化类的配置和调用其父类的方法 - mixins:混入属性,多继承
- config:定义类的配置项,会把config里的每个属性加上get和set方法 - statics:定义静态方法,属性不能被子类继承
- inheritableStatics:与statics类似,但是其属性可被子类继承 - singleton:设置该类为单件模式
http://www.cnblogs.com/youring2/archive/2013/08/22/3274135.html
使用Ext.define自定义类
10. 操作dom对象的方法
11. 获取父子容器元素方法
http://chun521521.iteye.com/blog/2067165
纯自用方便
1.当前对象的父对象(上级对象) this.ownerCt:
2.当前对象的下一个相邻的对象 this.nextSibling();
3.当前对象的上一个相邻的对象 this.previousSibling(); 4.当前容器中的第一个子对象 this.get(0); this.items.first();
5.当前容器的最后一个子对象 this.items.last();
6.查找当前对象的所有上级匹配的容器 this.findParentByType(String xtype) 7.查找当前对象的所有下级匹配的组件 this.findByType(String xtype)
12. 启动顺序
在classic.json文件中,已经把app.js、bootstrap.css等文件加进去了,所以,在index.html文件中,只需要加载bootstrap.js文件就行了。
Index.htmlBootstrap.jsClassic.json or modern.json(所有类定义含app.js)执行app.js(创建窗口)->application.js