我有一个
Java对象,其中person对象包含一个displayName对象.我已将其转换为JSP的
JSON对象.数据如下所示:
var people = [ {"id":52959,"displayName":{"firstName":"Jim","lastName":"Doe","middleName":"A"},"projectId":50003,"grade":"8","statusCode":"A","gradYear":2016,"buyer":false},{"id":98765,"displayName":{"firstName":"Jane","middleName":"Z"},"buyer":true} ];
我想将我的列绑定到驻留在displayName对象中的名称属性,但是我无法获取列定义来识别数据所在的位置.以下是我的firstName列定义的示例:
{id: 'displayName.firstName',field: 'displayName.firstName',name: 'First Name',width: 110,sortable: true,editor: TextCellEditor,formatter: SpaceFormatter,cssClass: '',maxLength: 250,editable: true}
解决方法
默认情况下,Slickgrid不支持此功能,但您可以通过将自定义值提取器添加到选项对象来解决此问题.
var options = { dataItemColumnValueExtractor: function(item,columnDef) { var names = columnDef.field.split('.'),val = item[names[0]]; for (var i = 1; i < names.length; i++) { if (val && typeof val == 'object' && names[i] in val) { val = val[names[i]]; } else { val = ''; } } return val; } } var grid = new Slick.Grid($("#slickgrid"),data,columns,options);
代码使用slickgrid 2.0进行测试,并且工作正常.不幸的是,似乎slickgrid代码有点不一致,编辑者没有考虑到这个选项,所以这个解决方案只有在不显示数据的情况下才可以使用.