<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Blog for Alex Wan

    Let life be beautiful like summer flowers and death like autumn leaves.

    統計

    留言簿(10)

    BlogJava

    Blogs

    DIV+CSS

    JQuery相關

    友情鏈接

    常去的地方

    數據供應

    閱讀排行榜

    評論排行榜

    基于EXT2的RadioGroup

    背景:
    Ext2標準實現的Radio不夠用!一方面是布局不太方便,另一方面是事件比較難用.所以我實現了一種以onChange事件為中心的RadioGroup.
    實現代碼:

      1Ext.namespace('Ext.ux');
      2
      3Ext.ux.Radio =function(config)
      4{
      5    Ext.ux.Radio.superclass.constructor.call(this,config);
      6    this.group = config.group;
      7    this.value=config.value;
      8}
    ;
      9Ext.extend(Ext.ux.Radio ,Ext.form.Radio, {
     10     onRender : function(ct, position){
     11         Ext.ux.Radio.superclass.onRender.call(this, ct, position);
     12          if(this.el && this.el.dom){
     13            this.el.dom.value = this.value;//make the value for radio is the value user has given!
     14        }

     15         this.on('check',this.onCheck);
     16     }
    ,
     17    clearInvalid : function(){
     18         this.group.clearInvalid();
     19    }
    ,markInvalid : function(msg){
     20         this.group.markInvalid(msg);
     21    }
    ,
     22    onClick : function(){
     23        
     24        if(this.el.dom.checked !=this.checked){
     25             this.group.setValue(this.value);
     26        }

     27       
     28    }
    ,
     29     setValue : function(v){
     30        this.checked = (v === true || v === 'true|| v == '1|| String(v).toLowerCase() == 'on');
     31        if(this.el && this.el.dom){
     32            this.el.dom.checked = this.checked;
     33            this.el.dom.defaultChecked = this.checked;
     34            this.group.el.dom.value=this.value;
     35        }

     36    }
    ,onCheck:function(radio,checked)
     37    {
     38        
     39        Ext.log('radiao change!');
     40        if(checked)
     41        {
     42        var oldValue=this.group.getValue();
     43        this.group.onChange(this.group,oldValue,this.getValue());
     44        }

     45        
     46        //this.fireEvent('change', this.group, oldValue, newValue);
     47    }
    ,
     48     getValue : function(){
     49        if(this.rendered){
     50            return this.el.dom.value;
     51        }

     52        return false;
     53    }

     54}
    );
     55
     56Ext.ux.RadioGroup=function(config)
     57{
     58    this.radios=config.radios;
     59    this.defaultValue=config.defaultValue||false;
     60    Ext.ux.RadioGroup.superclass.constructor.call(this,config);    
     61}
    ;
     62Ext.extend(Ext.ux.RadioGroup,Ext.form.Field,  {
     63    defaultAutoCreate:{tag:'input', type:'hidden'},
     64     onRender : function(ct, position){
     65         
     66        Ext.ux.RadioGroup.superclass.onRender.call(this, ct, position);
     67        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
     68        if (this.radios && this.radios instanceof Array) {
     69            this.els=new Array();
     70            this.els[0]=this.el;
     71            for(var i=0;i<this.radios.length;i++){
     72                var r=this.radios[i];
     73                this.els[i]=new Ext.ux.Radio(Ext.apply({}{
     74                    renderTo:this.wrap,
     75                    hideLabel:true,
     76                    group:this
     77                }
    ,r));
     78                if (this.horizontal) {
     79                    this.els[i].el.up('div.x-form-check-wrap').applyStyles({
     80                        'display': 'inline',
     81                        'padding-left': '5px'
     82                    }
    );
     83                }

     84            }

     85            if(this.hidden)this.hide();
     86        }

     87        this.setDefaultValue();
     88    }
    ,initValue : function(){
     89        //Ext.log('initValue for'+this.name);
     90        if(this.value !== undefined){
     91            this.el.dom.value=this.value;
     92            
     93        }
    else if(this.el.dom.value.length > 0){
     94            this.value=this.el.dom.value;
     95        }

     96    }
    ,getValue:function()
     97    {
     98         if(this.rendered){
     99            return this.el.dom.value;
    100        }

    101        return false;
    102         /*
    103          if(this.value !== undefined){
    104            return this.value;
    105        }else if(this.el.dom.value.length > 0){
    106            return this.el.dom.value;
    107        }
    108        */

    109    }
    ,setValue:function(v)
    110    {
    111        var oldValue=this.getValue();
    112        if(oldValue==v)return ;
    113        for(var j=0;j<this.els.length;j++)
    114            {
    115                if(this.els[j].value==v)
    116                {
    117                    this.els[j].setValue(true);
    118                }

    119                else
    120                {
    121                    this.els[j].setValue(false);
    122                }

    123            }

    124     this.el.dom.value=v;
    125     this.fireEvent('change', this.group, oldValue, v);       
    126    }
    ,
    127    setDefaultValue:function()
    128    {
    129        for(var j=0;j<this.els.length;j++)
    130            {
    131                if(this.els[j].value==this.defaultValue)
    132                {
    133                    this.els[j].setValue(true);
    134                    return;
    135                }

    136                else
    137                {
    138                    if(j<this.els.length-1)
    139                    {
    140                        this.els[j].setValue(false);
    141                    }

    142                    else
    143                    {
    144                        this.els[j].setValue(true);
    145                    }

    146                    
    147                }

    148            }

    149     }
    ,
    150    // private
    151    onDestroy : function(){
    152        if (this.radios && this.radios instanceof Array) {
    153            var cnt = this.radios.length;
    154            for(var x=1;x<cnt;x++){
    155                this.els[x].destroy();
    156            }

    157        }

    158        if(this.wrap){
    159            this.wrap.remove();
    160        }

    161        Ext.ux.RadioGroup.superclass.onDestroy.call(this);
    162    }
    ,
    163    
    164    // private
    165    
    166    onChange : function(oldValue, newValue){
    167        this.fireEvent('change', this, oldValue, newValue);
    168    }

    169
    170}
    );
    171Ext.reg('ux-radiogroup', Ext.ux.RadioGroup);

    例子:
        var boolField= new Ext.ux.RadioGroup({
            fieldLabel : 
    "actionNow",
            allowBlank : 
    true,
            horizontal:
    true,
            maxLength : 
    200,
            defaultValue:'
    true',
            name : 
    "activity.ishavecare",
            radios:[
    {boxLabel:'Yes',value:'true'},{boxLabel:'No',value:'false'}]
            
            
        }
    );
    boolField.on('change',
    function(radioGroup,oldValue,newValue)
    {

    Ext.log('value changes from '
    +oldValue+"  to "+newValue);
    }

    )




    Let life be beautiful like summer flowers and death like autumn leaves.

    posted on 2008-06-09 22:11 Alexwan 閱讀(1940) 評論(2)  編輯  收藏

    評論

    # re: 基于EXT2的RadioGroup 2009-08-11 21:00 盛樹

    垃圾的東西~~
    看看這個吧!~~


    var checkTimeType = {"check": function(radioGroup, checked) {
    if (checked)
    alert(radioGroup.name + " radio (value=" + radioGroup.inputValue + ") had change "+checked);
    }};
    var ssTimeType = { xtype: 'radiogroup',
    fieldLabel: '時間類型',
    itemCls: 'x-check-group-alt',
    columns: 2,
    items: [{boxLabel: '不定時間', name: 'ssTimeType', inputValue: 0, listeners: checkTimeType},
    {boxLabel: '具體時間', name: 'ssTimeType', inputValue: 1, listeners: checkTimeType, checked: true}]};  回復  更多評論   

    # re: 基于EXT2的RadioGroup 2009-08-12 09:21 Alexwan

    樓上的請看清了我文章的發表時間,你提到的'x-check-group-alt'組件是在我寫這個組件之后的幾個月才出現的,而且介于當時個人能力的有限,寫出來的組件有局限很正常;在評論別人或者別人的作品時,請考察清楚。  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲乱码中文字幕在线| 亚洲国产综合人成综合网站00| 久久精品国产亚洲AV天海翼| 91成人免费在线视频| 亚洲日本视频在线观看| 精品久久8x国产免费观看| 亚洲国产精品美女| 成人免费午夜视频| 亚洲av成本人无码网站| 免费很黄很色裸乳在线观看| 特级aa**毛片免费观看| 国产亚洲AV手机在线观看| 精品国产污污免费网站| 亚洲综合自拍成人| 久久WWW色情成人免费观看| 中国china体内裑精亚洲日本| 破了亲妺妺的处免费视频国产| 久久精品国产亚洲AV| 中文字幕中韩乱码亚洲大片 | 亚洲AV永久精品爱情岛论坛| 免费黄网站在线看| 亚洲天堂一区二区三区四区| 最近最新的免费中文字幕| 看全免费的一级毛片| 亚洲中文字幕日产乱码高清app| 免费在线中文日本| 亚洲一区二区三区免费视频| 国产在线19禁免费观看国产 | 24小时免费看片| 亚洲色大网站WWW永久网站| 亚洲欧洲精品成人久久奇米网| 青柠影视在线观看免费高清 | 亚洲AV无码一区二区三区牲色 | 久久精品免费视频观看| 亚洲二区在线视频| 亚洲精品视频在线看| **一级一级毛片免费观看| 黄色一级毛片免费| 亚洲精品美女在线观看| 午夜国产大片免费观看| 51精品视频免费国产专区|