将嵌套的JSON数据对象绑定到easyUi dataGrid

时间:2012-05-20 05:18:51

标签: jquery datagrid

环境:

1.EasyUI Datagrid
2.jsp(s2sh)
3.mysql 
//until now i can populate the datagrid plugin with json object normally but a 
  small issue.

描述:

我从服务器返回了一个Json-data-object,如下所示:

{"total":28,"rows":[{"productid":"1","attr":{"size":"10dc","color":"red&yellow"},
                    {"productid":"2","attr":{"size":"102dc","color":"green&null"}

使用插件:

$(document).ready(function(){
      $('#tt').datagrid({  
        url:'loadVerifyStream.eAction',
        pagination:true,
        columns:[[  
                {field:'productid',title:'Product ID',width:100},  
                {field:'?????',title:'Product Size',width:250},  
                {field:'?????',title:'product Color',width:100},
       ]]  

});       });

我无法输出'大小'和'颜色'到网格,我试过

{field:'attr.size',title:'Product Size',width:250},
{field:'attr.color',title:'product Color',width:100},
没有工作。

谁知道如何解决这个问题? 提前致谢。

// ----------------------------------------- 我想我已经解决了这个问题。

参考DataGrid的API:

{field:'color',title:'product Color',width:100,
   formatter:function(val,rec){
   return rec.attr == null ? "":rec.attr.color;

}}

2 个答案:

答案 0 :(得分:3)

这是一个更通用的解决方案:

说你的json对象如下:

[{id:3,client:{name: "John",city:'New York'},
[{id:4,client:{name: "Paul",city:'Paris'}]

要获取fomatter函数中的字段名称,请使用此标记:

<table id="dg">
    <thead>  
      <tr>
        <th field="id" width="50">ID</th>
        <th field="not used" formatter="(function(v,r,i){return formatColumn('client.name',v,r,i);})" width="50">Client name</th>
        <th field="not used" formatter="(function(v,r,i){return formatColumn('client.city',v,r,i);})" width="50">Client city</th>
      </tr>  
    </thead>  
</table>

然后定义formatColumn

function formatColumn(colName, value, row, index) {
    return eval("row."+colName");
}

答案 1 :(得分:1)

或者您可以使用此hack(适用于easyui版本1.3.1)。 在文件jquery.easyui.min.js中,转到第7982行, 应该有以下代码:

cc.push(col.formatter(_5c5,_5c2,_5c1));

并替换为此代码

 cc.push(col.formatter(_5c5,_5c2,_5c1,_5c4));

然后按如下方式定义格式化程序:

function formatColumn(value, row, index, field) {
    // field is the field name defined for this column
    return row[field]; // or anything you want
}