easyUI 滚动条

来源:互联网 发布:打字慢能做淘宝客服吗 编辑:程序博客网 时间:2024/05/17 22:59

@author YHC

现在做一个项目用到easyUI,但是easyUI有一个小小的bug就是,列超过了不出现滚动条:

转载注明地址:thanks!

废话不多说直接上代码:

@author YHC

//easyUI默认出现滚动条function defaultHaveScroll(gridid){var opts=$('#'+gridid).datagrid('options');    // alert(Ext.util.JSON.encode(opts.columns));    var text='{';    for(var i=0;i<opts.columns.length;i++){    var inner_len=opts.columns[i].length;    for(var j=0;j<inner_len;j++){    if((typeof opts.columns[i][j].field)=='undefined')break;     text+="'"+opts.columns[i][j].field+"':''";     if(j!=inner_len-1){     text+=",";     }    }    }    text+="}";    text=eval("("+text+")");    var data={"total":1,"rows":[text]};    $('#'+gridid).datagrid('loadData',data);   // $('#grid').datagrid('appendRow',text);   $("tr[datagrid-row-index='0']").css({"visibility":"hidden"});}

方法是通用的,你copy过去可以直接调用,传入的参数是你的datagrid的ID;

描述以上代码实现原理:

1.为什么easyUI默认不出现滚动条?????

看看这张图:注意(单表头和多表头一样)这里的举例是多表头


右边的非锁定列其实是被一个DIV包裹了,单表头就是1个DIV,多表头就是2个DIV,由于他将DIV设置了内容超过的时候才出现滚动条,所以当你初始化没有内容的时候就不会出现滚动条;

2.以上代码如何实现的????

在你初始化之后根据gridID得到你的所有的列信息,拼接一个行json对象,用easyUI载入本地json的方法进行载入数据,在将该行设置为不可视,这样看起来的效果,如果你的行超过了grid的宽度那么就会出现滚动条,否则不会出现滚动条;

3.为什么不用css样式的display而用visibility属性?

display隐藏某个控件之后,不占改位置,也就是位置也取消了,但是visibility属性设置为hidden只是不可视但是位置还是占有的,所以出现滚动条;

4. $("tr[datagrid-row-index='0']").css({"visibility":"hidden"});代码的解释?

这个代表查找tr的自定义属性datagrid-row-index的值为0的tr元素,如果是多表头就会得到2个tr对象,如果单表头就只有一个,实际上datagrid的每一行就是tr包含td,td又包含div,div中包含数据,所以最终我只需要隐藏tr那么它的所有子元素也随之隐藏不可视,就实现了最终的样式;

以上不是最好的做法,只是暂时的替代方案,贴出来与大家共享,如果大家有更好的解决方案,欢迎提出!

这个是visibility和display的区别的CSS3.0API上的: