EXTJS相关处理

grid的自适应宽度设置:
grid中设置属性viewConfig: {forceFit:true}, //自动分配列宽  
grid所在的容器设置layout:'fit'
想要使列考照比例显示,就再分别设置列属性width:1,所有列的width属性按照比例分配


EXTJS渲染过程,如果要动态控制控件值会有点麻烦,特别是当窗体渲染完成,但部分控件还未显示出来的时候(例如在未激活的tabpanel中),直接调用相关的setxxx()或者updatexxx()会出现问题。

 例如设置Ext.form.label的内容,可以使用label.getEl().update()方法
但如果是label所在panel已经渲染完成,但还没显示出来,此时label.getEl()会提示undefine,想要设置值,可以自己实现一个设置函数

	setLabelText: function(label, text) {
		if(Ext.isEmpty(label.getEl())) {   
               //如果text为数字的时候, 可以添加'',不然当数字为0时,可能会不显示                   
                     label.text = ''+text;
		} else {
		    label.getEl().update(text);
		}
	}

设置Ext.slider(EXTJS2.1)时可以调用silder.setValue()方法,但如果此时slider是隐藏的,则会提示silder.innerEl is not define,也可以进行修改,实现一个设置函数

        setSliderValue:function(silder, value) {
		if (Ext.isEmpty(silder['innerEl'])) {
			silder.value = value;
                } else {
    	                silder.setValue(value,false);
                }
	}
对于slider还会存在另一种情况,因为slider每次值变动时还有有一个滑动过程,第一次可以通过
if (Ext.isEmpty(silder['innerEl'])) {
			silder.value = value;
来设置,但第二次隐藏时,则会因为控件的隐藏而无法获取控件宽度,停留在0的位置不滑动。既然是因为获取不到宽度,那就在第一次出现的时候就记录宽度,重写Ext.slider的getRatio()方法
getRatio : function(){
      	var me = this;
        var w = me.innerEl.getWidth();
        if (w !=0 ) {
        	me.w = w;
        } else if (w == 0 && me.w != 0) {
        	w = me.w;
        }
        var v = me.maxValue - me.minValue;
        return w/v;
      }


EXTJS的列布局layout:column在firefox中显示正常,在IE中可能会出现错行,
这种情况可以通过对列布局的每一列设置宽度,就可以使所有控件在一行了。


EXT中的Slider的控件,在IE10中右边圆角会断裂,解决办法有两种:
1、修改ext-all.css中 .x-slider 样式,在当中添加固定宽度,如width:73px,!important强制即可
2、在IE10,IE9中会这样,但在IE8中不会,所以在IE10中采用IE8的渲染方式
  <!--通过设置meta标签使IE9、IE10兼容IE8 -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>


EXT中判断变量为空使用Ext.isEmpty()
还有一个String.isEmpty(),
Ext.isEmpty(0)=false

String.isEmpty()=true



你可能感兴趣的:(ExtJs,动态设置)