所謂為了支持某屬性的子屬性,主要為了解決。在服務器返回的json格式的數據的某個屬性帶有自屬性,而我們恰恰又需要使用到該子屬性作為我們的datagrid的某個字段的。默認情況下datagrid只能支持一級屬性字段(屬性的屬性字段屬於二級字段)。
對於這個問題的解決方案有兩種方式
1、就是更改esayui源文件,使其支持field.sonfield的形式。
javascript語法為我們提供了兩種方式獲取一個對象的屬性:點字符連接和[]方式。使用[]可以很方便的將一個屬性通過字符串的方式獲取。但是javascript並沒有提供點連接的字符串屬性訪問方式,例如:
Js代碼
var person={name:{first:"lily",last:"wang"},
addr:{addr1:"beijing",addr2:"zhongguo"}};
alert(person.name.first);
alert(person['name']['first']);
alert(person['name.first']);//不支持
可以采用下面方式根據點連接的字符串獲取對象屬性值的屬性值。
Js代碼
var str='name.first';
var test=eval("person['"+str.replace(/\./g,"']['")+"']");
alert(test);
而 easyui datagrid的coloumns的屬性定義方式:
Js代碼
{title:'姓名',field:'name',width:60},
{title:'聯系方式',field:'phone',width:100},
它的field不支持點字符連接的字符串模式
Js代碼
{title:'姓名',field:'person.name',width:60},
{title:'聯系方式',field:'person.phone',width:100},
而實際通過ajax從服務器獲得的json往往需要使用點連接符的字符串獲取屬性值。
修改jquery.easyui.min.js中第8670行:
Js代碼
//var _644=_641[_643];//可能解決問題
var _644=eval("_641['"+_643.replace(/\./g,"']['")+"']");
這樣就可以很好的支持person.name格式的field了
備注一下:我用額esayui是1.3.3版本的。免得大伙找半天找不到對應的地方
第二種方案就是采用formatter格式化方法來實現
例如:服務器返回的數據是
Js代碼
[{"id":{"tagId":"A0001","timeCs":{"time":1371657600000}},"readerIds":"jing;isnig;sning"}]
而應用過程中需要使用到id屬性下的tagId子屬性。我們可以將field的屬性直接賦值為id屬性,而后通過轉換函數來實現。
示例如下:
Js代碼
columns:[[
{field:'id',title:'卡號',width:20,formatter: function(value,row,index){
if (value.tagId){
return value.tagId;
} else {
return value;
}
}},
{field:'id',title:'時間',width:20,formatter: function(value,row,index){
return new Date(value);
}}
]]
有個問題需要補充一下:上面的兩個field為id的這種情況是通不過的。對於要展示同一個屬性字段下的兩個子屬性建議采用第一種方案解決。或者兩種結合的方式解決。
————————————————
版權聲明:本文為CSDN博主「戰神」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jianyi7659/article/details/9736871
