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 閱讀(1946) 評論(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'組件是在我寫這個組件之后的幾個月才出現的,而且介于當時個人能力的有限,寫出來的組件有局限很正常;在評論別人或者別人的作品時,請考察清楚。  回復  更多評論   


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


          網站導航:
           
          主站蜘蛛池模板: 石景山区| 伊春市| 阿坝| 桃江县| 钟祥市| 石狮市| 新郑市| 诸暨市| 尖扎县| 观塘区| 抚宁县| 东至县| 亚东县| 广西| 托克托县| 祁门县| 石景山区| 台安县| 沧州市| 托克逊县| 余姚市| 黔西| 进贤县| 盖州市| 道真| 洛阳市| 楚雄市| 泸州市| 高平市| 东方市| 普陀区| 会泽县| 鄂温| 沂水县| 龙山县| 顺平县| 巴林右旗| 民丰县| 阳高县| 林西县| 沭阳县|