<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相關

    友情鏈接

    常去的地方

    數據供應

    閱讀排行榜

    評論排行榜

    [ExtJs]基于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-27 09:40 Alexwan 閱讀(5823) 評論(3)  編輯  收藏 所屬分類: JavaScript

    評論

    # re: [ExtJs]基于EXT2的RadioGroup 2008-06-27 12:25 aGuang(cRipple.Li(at)gmail.com)

    3q,博主!
    這里有個問題,我用firebug查看使用這個控件的表單post數據時發現會附帶一個參數值,
    如下:
    ext-comp-1029(這應該是ext生成的一個id)=true(或者是false,具體根據設置而定).不知道這個有什么用?還是只是個hidden表單數據?能否去掉呢?  回復  更多評論   

    # re: [ExtJs]基于EXT2的RadioGroup 2008-06-27 13:18 萬洪泉


    呵呵,當選中一個radio時就會發送當前選中的值,這個可以不去理會它.如果要去掉的話,可以在提交之前把group的所有成員都disable了,這樣就不會發送數據.但是這樣做會帶來一個問題,就是disable之后什么時候再去enable的問題.目前我還沒找到關于去掉這個隱藏的值的行之有效的方法..   回復  更多評論   

    # re: [ExtJs]基于EXT2的RadioGroup 2008-06-28 11:15 長江三峽

    學習  回復  更多評論   

    主站蜘蛛池模板: 中文字幕亚洲免费无线观看日本 | 国产亚洲精品a在线观看| yellow免费网站| 亚洲精品网站在线观看你懂的| 女人18毛片水真多免费播放| 猫咪免费人成在线网站| 亚洲va在线va天堂va888www| 性感美女视频在线观看免费精品 | 中国人xxxxx69免费视频| 亚洲精品又粗又大又爽A片| 亚洲日韩乱码中文无码蜜桃臀网站| 国产高清不卡免费在线| 人人爽人人爽人人片A免费| 久久综合亚洲色HEZYO社区| 国产又长又粗又爽免费视频| 91视频免费网址| 成人a毛片视频免费看| 亚洲一区在线视频| 亚洲人色婷婷成人网站在线观看| 国产片AV片永久免费观看| 国产精品免费在线播放| 亚洲综合欧美色五月俺也去| 久久久久久久尹人综合网亚洲| 午夜成人免费视频| 99爱在线观看免费完整版| yellow视频免费在线观看| 亚洲国产成人综合精品| 亚洲综合免费视频| 亚洲欧洲日产国码无码网站| 国产精品公开免费视频| 久久国产免费福利永久| 免费无码又爽又刺激高潮软件| 国产亚洲福利一区二区免费看| 91嫩草亚洲精品| 亚洲VA中文字幕无码一二三区 | 日韩在线a视频免费播放| h片在线免费观看| 久久久国产精品福利免费| 日韩成人毛片高清视频免费看| 91丁香亚洲综合社区| 亚洲精品**中文毛片|