打开ext的API,如下
找到Class这个选项
将鼠标移到config那里可以看到有以下属性:
好了,让我们开始进入主题:
首先,来讲讲如何自定义一个类,在ext中,创建一个类其实与其他语言差不多,只是表达的方式不一样而已,下面是定义一个类的方法
Ext.define('Father', { name: 'Unknown', constructor: function(name) { if (name) { this.name = name; Ext.Msg.alert('I\'m hungry','I want to eat'); } }, eat:function(){ Ext.Msg.alert('I\'m hungry,I want to eat'); } }) var aaron = Ext.create('Father', 'Aaron');
既然,我们知道了如何定义一个类了,那么我们就要知道他是如何继承的了,用到上图中的extend这个属性 ,方法如下 :
Ext.define('Person', { say: function(text) { alert(text); }});Ext.define('Developer', { extend: 'Person', say: function(text) { this.callParent(["print "+text]); }});
用mixins来实现多继承,如下:
Ext.define('Singer', { sing: function() { alert("For he's a jolly good fellow...") } }); Ext.define('Dancer', { dance: function() { alert("For he's a jolly Dance...") } }); Ext.define('Musician', { mixins: { tom:'Singer', jery:'Dancer' }, sing:function(){ alert(123); // this.mixins.canSing.sing.call(this); } }) var kk=Ext.create('Musician'); kk.sing(); kk.mixins.tom.sing.call(this); kk.dance();
用alias来为类设置别名:
<!--alias的用法,使用alias时注意,名称必须为小写--> /*Ext.define('MyApp.CoolPanel', { extend:'Ext.panel.Panel', alias: ['widget.coolpanel','widget.coolpanel2'], hehe:function(){Ext.Msg.alert('hehe','hehe')}, title: 'Yeah!' });*/ //通过Ext.widget()创建实例 /*Ext.widget('coolpanel', { width : 100, height : 100 , style: { color: '#FFFFFF', backgroundColor:'#000000' }, renderTo:Ext.getBody() });*/ //通过xtype创建 /*Ext.widget('coolpanel', { width : 200, height : 200 , items: [ {xtype: 'coolpanel2', html: 'Foo'}, {xtype: 'coolpanel2', html: 'Bar'} ], renderTo:Ext.getBody() });*/
<!--alternateClassName的用法,跟alias有点类似--> /*Ext.define('Developer', { alternateClassName: ['Coder', 'Hacker'], code: function(msg) { alert('Typing... ' + msg); } }); var joe = Ext.create('Developer'); joe.code('stackoverflow'); var rms = Ext.create('Hacker'); rms.code('hack hack');*/ <!--*********************************************-->
<!--inheritableStatics 定义静态方法,可以被子类继承,类似于static,但static是不可以被子类继承--> /*Ext.define('Human', { inheritableStatics : { eat : function(){ alert('eat'); } }, say: function(text) { alert(text); } }); Ext.define('Man', { extend : 'Human' }); Man.eat(); */ <!--*********************************************-->
<!--*********************************************--> /*uses 和 requires : 与requires属性类似,都是对某些类进行引用 uses -- 被引用的类可以在该类之后才加载. requires -- 被引用的类必须在该类之前加载. */ Ext.define('Gird', { uses : ['Boy'], getBoy : function(){ return Ext.create('Boy'); }, sleep : function(){ alert('sleep'); } }); //对于uses属性,Boy类放在后面是可以的,不会报错 Ext.define('Boy', { play : function(){ alert('play'); } }); //对于requires属性,Boy类必须在Grid类之前加载,不然会报错 Ext.define('Boy', { play : function(){ alert('play'); } }); Ext.define('Gird', { requires : ['Boy'], getBoy : function(){ return Ext.create('Boy'); }, sleep : function(){ alert('sleep'); } }); <!--*********************************************--> <!--Cofig的使用,主要是简化构造器中的参数--> /*Ext.define('Father', { config:{ name:'LiLi', age:0 }, constructor: function(config) { //Ext.Msg.alert('message','My name is '+name+'i\'m'+age+'old'); this.initConfig(config);//除了这个,什么都不能加进来 }, eat:function(){ Ext.Msg.alert('I\'m hungry,I want to eat'); } }) var aaron = Ext.create('Father', { name:'huahua', age:19 }); alert(aaron.getName());*/ <!--*********************************************-->
好了,这一节就到这吧,小海我也累了,明天继续把学到的东西与大家一起分享