现在的位置: 首页 > easyui > Grid > datagrid > 正文
表格组件列属性formatter和styler使用方法
2012年09月21日 datagrid ⁄ 共 1220字 评论数 3 ⁄ 被围观 34,700 views+
文章目录
[隐藏]

对于jQuery easyui的datagrid组件大家应该都不陌生,对于他的两个列属性:formatter和styler,大家应该也都不陌生,他们都是一个函数,我们为了让单元格表现为我们想要的形式,经常会用到它们,那么他们之间究竟有什么联系和区别呢,本文做简单谈论。

明确单元格DOM结构

要想弄清楚formatter和styler属性是怎么工作的,首先要弄清楚datagrid组件内容单元格的DOM接口,注意,这里指的是内容单元格,不包括标题单元格,标题单元格的结构有所区别。我们所有内容单元格的默认DOM结构如下:

<td field="code">
    <div style="text-align:left" class="datagrid-cell datagrid-cell-c1-code">
       	 文字
    </div>
</td>

很简单,其实只是两层结构,td标签的field属性便是字段的编码,而单元格内容统一用一个div包裹起来,在我举的这个例子中,div标签有个text-align样式,这个样式其实是由列属性align决定的,同时div标签的class属性值并不是一个定值,需要注意一下。

理解formatter是什么

顾名思义,formatter是格式化的意思,也就是以何种形式呈现的意思,对于一个纯文本,我可以将它呈现为checkbox,也可以呈现为input输入框,甚至下拉框等等,或者是在文本外层包裹更多的DOM(当然包裹这样做并没有多大意义),这就是formatter的真正意义。

定义示例:

formatter: function(value, row, index){
    if (value == "007") {
        return '<font color="red">' + value + '</font>';
    }
    else {
        return value;
    }
}

使用formatter需要注意以下几点:

  • 无论formatter出何种形式,格式化出的DOM一定都是被包含在默认的div标签内
  • 在写formatter函数时要保证有值返回,否则单元格没有内容可展示,所以if的时候别忘了else
  • formatter函数不会作用在列属性checkbox为true的单元格上,checkbox列是组件预留的。

理解styler是什么

顾名思义,styler是样式的意思,听起来跟formatter容易混淆,其实它只是利用jQuery的css函数修改默认td标签的样式,所以styler属于低能儿,只能定义单元格的背景色等,而且往往被默认的div标签样式覆盖。

定义示例:

styler: function(value, row, index){
    if (value == "007") {
        return 'background-color:blue;';
    }
}

使用styler实在没有什么注意点,因为它确实太低能了,个人意见是仅仅用他定义单元格背景色或者背景图片就足够了。

目前有 3 条留言 其中:访客:2 条, 博主:1 条

  1. 厦门小粟 : 2013年11月15日10:48:52  -49楼 @回复 回复

    你好!我在用formatter的时候遇到一个问题,想请教你一下,是这样的:我格式化出一个超链接后,原来行处于选中状态,点击超链接后行就不选中了,我想让点击超链接时行还是处于选中状态,请问要怎么做? ❓


    • 管理员
      世纪之光 : 2013年11月15日12:16:37  地下1层 @回复 回复

      在超链接的事件处理函数里面,阻止一下事件冒泡。

  2. 文子 : 2016年03月08日10:10:43  -48楼 @回复 回复

    请问我用styler的时候为什么不能改变td的背景色?
    代码:
    //显示样式
    function style_Formatter(value,row,index){
    if( ypzData != null && ypzData[‘rows’] != null){
    $.each(ypzData[‘rows’],function(i,v){
    if( v.HDMNS_ID == value.split(‘,’)[0] && v.VDMNS_ID == value.split(‘,’)[1]){
    return ‘background-color:red;’;
    }
    });
    }
    }

给我留言

留言无头像?


×