有时我们从后台获取的数据不一定能满足页面显示的需求,比如后台数据中某个字段值是“1/0”,但是显示时我们希望显示为“是/否”。这就需要对数据进行转换,也就是预处理。 可
有时我们从后台获取的数据不一定能满足页面显示的需求,比如后台数据中某个字段值是“1/0”,但是显示时我们希望显示为“是/否”。这就需要对数据进行转换,也就是预处理。
可以有两种方法,假设使用场景是JsonRest+ObjectStore组合为grid提供懒加载数据。
方法一、对store中的数据进行预处理。
var json = new JsonRest({ target: url }); var store = new ObjectStore({objectStore: json}); store.onFetch = function(results){ results.forEach(function(item){ // 在这里预处理数据 if(item.admin == '1'){ item.admin = '是'; }else{ item.admin = '否'; } }); };
方法二、在grid的structure中预处理。
var layout = [ [{ 'name': 'Column 1', 'field': 'id', 'width': '100px' }, { 'name': 'Column 2', 'field': 'admin', 'width': '100px', get: function(colIndex, item) { // processing data if (item.admin == '1') { return '是'; } else { return '否'; } } }, { 'name': 'Column 3', 'field': 'desc', 'width': '200px' }] ];另外,遇到带内部对象的json数据,例如:
{"name":"陈","age":"24","phone":{"company":"123","home":"456","private":"789"}}
我们想把内部对象的属性company显示到grid,如果这样写'field': 'phone.company'肯定行不通,所以也适合用上面提到的两种方法之一进行转换。
假如采用第二种方法:
{ 'name': 'Column 2', 'field': 'phone.company', 'width': '100px', get: function(colIndex, item) { // processing data return item.phone.company; } }
2014-5-13更新:
采用第二种方法时,对grid刷新会不起作用,就是由于get方法导致。代码如下:
Grid.resize(); Grid._refresh();目前原因不清楚。所以如果需要用到grid刷新,还是采用第一种方式