3.define

1、定义类

define方法定义类
extend:用于继承
alias:类的别名
alternateClassName:备用名,与alias差不多
requires:需要使用到的类名数组,在动态加载时会根据该属性去下载类,注意需要的类是在当前类之前被加载
uses:与requires类似 但是被引用的类可以在该类之后才加载
constructor:构造器属性,一般用来初始化类的配置和调用其父类的方法
mixins:混入属性,多继承
config:定义类的配置项,会把config里的每个属性加上get和set方法
statics:定义静态方法,属性不能被子类继承
inheritableStatics:与statics类似,但是其属性可被子类继承
singleton:设置该类为单件模式

 实例:定义类

    Ext.define('Person',{
        config:{//config属性 就是配置当前类的属性内容,并且会加上get和set方法
            name:'start',
            age:10
        },
        say:function(){
            alert('我是方法...');
        },
        constructor:function(config){//构造器 初始化信息
//          for(var attr in config){
//                alert(attr + " : " + config[attr]);
//            }
            var me=this;
            me.initConfig(config);//初始化传递进来的参数
        }
    });

 

 实例:实例化对象

    //普通实例化对象
    var p=new Person();
    alert(p.getName());
    alert(p.getAge());
    //普通实例化对象
    var p=new Person({
        name:'wwl',
        age:80
    });
    alert(p.getName());
    alert(p.getAge());
    
    //Ext.create 实例化一个对象  推荐使用方式
    var p = Ext.create('Person',{
        name:'王五' , 
        age:30
    });
    alert(p.getName());
    alert(p.getAge());
    p.say();

 

 2、继承extend

    //Sup Class
    Ext.define('Person',{
        config:{
            name:'bjsxt'
        } ,
        constructor:function(config){
            var me = this ;
            me.initConfig(config);
        }
    });
    //Sub Class
    Ext.define('Boy',{
        //使用Ext的继承
        extend:'Person',
        config:{
            sex:'',
            age:20
        }
    });
  //实例化
var b = Ext.create('Boy',{ name:'张三', age:25 }); alert(b.name); alert(b.sex); alert(b.age);

 3、别名 使用原名一样

Ext.onReady(function(){
    Ext.define("User",{
        config:{
            name:'bjsxt111' , 
            age:100
        },
        alias:'uu' ,//起别名    底层代码在Ext.ClassManger
        alternateClassName:'uuu',    //给当前类一个备用名 底层代码在Ext.ClassManger
        constructor:function(config){
            var me = this;
            me.initConfig(config);
        }
    });
     
    var u = Ext.create('uuu');//一样 Ext.create('uu');
    alert(u.name);
    alert(u.age);

});

 

4、静态方法

statics(子类不能继承) inheritableStatics(子类可以继承)

实例对象是无法使用静态属性或方法的,用类名去使用静态属性

Ext.onReady(function(){

    Ext.define('Person',{
        config:{
            name:'我是父类'
        },
        statics:{    //静态的方法或属性
            static_id:'我是Person的id,不能被子类所继承!!'
        },
        inheritableStatics:{    //静态的方法或属性
            inheritableStatics_id:'我是Person的id,我可以被子类继承!!'
        },
        constructor:function(config){
            var me = this;
            me.initConfig(config);
        }
    });
    Ext.define('User',{
        extend:'Person' , 
        config:{
            age:20
        }
    });
    alert(User.static_id);//不可调用
    alert(User.inheritableStatics_id);
});

 

5、mixins 混合的配置项,可以多继承的配置

    Ext.define("Sing",{
        canSing:function(){
            alert('cansing...');
        }
    });
    Ext.define("Say",{
        canSay:function(){
            alert('cansay...');
        }
    });    
    Ext.define('User',{
        mixins:{
            sing:"Sing" , 
            say:"Say"
        }
    });
    
    var u = Ext.create("User");
    u.canSay();
    u.canSing();

 6、动态加载一个js文件

第一步:在js/extjs/添加文件夹 (ux),在这个ux文件夹下 建立自己的组件所对应的js文件
第二步:在js/extjs/ux下编写自己的扩展的组件
第三步:启用ext动态加载的机制 并设置要加载的路径
第四步:创建类的实例并使用

组建定义

//define的类名,一点要严格按照包层次路径去编写
Ext.define('js.05danamic.ux.MyWindow',{
        extend:'Ext.window.Window' , //继承Ext的window类
        title:'我是动态加载进来的组件',
        height:300 , 
        width:400 ,
        constrain:true , 
        modal:true , 
        html:'我是窗体的内容!!!!' ,     
        renderTo:Ext.getBody()    
});

 

动态加载

    Ext.Loader.setConfig({
        enabled:true ,
        paths:{
            myux:'js.05danamic.ux'
        }
    });
  第四步:创建类的实例并使用 Ext.create(
'js.05danamic.ux.MyWindow').show();

 

posted @ 2015-08-19 23:35  W&L  阅读(179)  评论(0编辑  收藏  举报