<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 長江三峽

    學習  回復  更多評論   

    主站蜘蛛池模板: 亚洲精品无码中文久久字幕| 久久亚洲AV成人无码| 日韩欧美亚洲中文乱码| 欧亚精品一区三区免费| 国产精品亚洲精品青青青| 免费看国产成年无码AV片| 亚洲综合精品伊人久久| 日韩免费高清视频网站| 国产精品亚洲一区二区无码| 日本中文一区二区三区亚洲| 丁香六月婷婷精品免费观看| 亚洲一区AV无码少妇电影☆| 精品四虎免费观看国产高清午夜| 亚洲网站在线观看| 四虎永久在线观看免费网站网址 | 久久亚洲中文字幕精品一区四| 免费精品视频在线| 亚洲国产一成人久久精品| 青青青国产手机频在线免费观看| 91亚洲国产成人久久精品网站| 精品国产sm捆绑最大网免费站 | 亚洲色大成网站www永久一区| 波多野结衣免费一区视频| 亚洲激情在线观看| 操美女视频免费网站| 又长又大又粗又硬3p免费视频| 亚洲爆乳精品无码一区二区三区 | 黄人成a动漫片免费网站| 在线观看亚洲天天一三视| 99在线观看精品免费99| 亚洲av永久无码精品网址| 亚洲综合色自拍一区| 在线永久看片免费的视频| 免费看黄福利app导航看一下黄色录像| 亚洲精品你懂的在线观看 | 国产精品久久免费| 久久水蜜桃亚洲AV无码精品| 亚洲成AV人片在线观看无| 成年轻人网站色免费看| 中文字幕乱码系列免费| 亚洲AV成人影视在线观看|