在JavaScript中,JSON是一種非常重要的數據格式,key:value的形式比XML那種復雜的標簽結構更容易理解,代碼量也更小,很多人傾向於使用它作為EXT的數據交換格式。
JsonReader支持分頁,與JSON數據對應格式如下:
totalProperty:json數據中,保存總記錄數的屬性 successProperty: json數據中,保存是否返回成功的屬性名 root: json數據中,保存記錄集的屬性的屬性名 id: json數據中,記錄中主鍵所對應的列的屬性名
例如:為Json- Reader准備的JSON數據如下面的代碼所示:
};
在JsonReader中設置為如下代碼:
//JsonReader var reader = new Ext.data.JsonReader( { totalProperty: "results", //totalRecords屬性由json.results得到 successProperty: true, //json數據中,保存是否返回成功的屬性名 root: "rows", //構造元數據的數組由json.rows得到 id: "id" //id由json.id得到 }, [ { name: 'name', mapping: 'name' }, { name: 'occupation'} //如果name與mapping同名,可以省略mapping ]
);
jsonreader從proxy中讀取的數據需要進行解析,這些數據轉換成Record數組後才能提供給Ext.data.Store使用。
在JavaScript中,JSON是一種非常重要的數據格式,key:value的形式比XML那種復雜的標簽結構更容易理解,代碼量也更小,很多人傾向於使用它作為EXT的數據交換格式。為JsonReader准備的JSON數據如下面的代碼所示:
var data = {
id:0,
totalProperty:2,
successProperty:true,
root:[
{id:'id1',name:'name1',descn:'descn1'},
{id:'id2',name:'name2',descn:'descn2'}
]
};
與數組相比,JSON的最大優點就是支持分頁,我們可以使用totalProperty參數表示數據的總量。successProperty參數是可選的,可以用它判斷當前請求是否執行成功,進而判斷是否進行數據加載。在不希望JsonReader處理響應數據時,可以把successProperty設置成false。
現在來討論一下JsonReader,看看它是如何與上面的JSON數據對應的,如下面的代碼所示。
var reader = new Ext.data.JsonReader({
successProperty: "successproperty",
totalProperty: "totalProperty",
root: "root",
id: "id"
}, [
{name:'id',mapping:'id'},
{name:'name',mapping:'name'},
{name:'descn',mapping:'descn'}
]);
因為name和mapping部分的內容是相同的,其實這裡的mapping可以省略,默認會用name參數從JSON中獲得對應的數據。如果不想與JSON裡的名字一樣,也可以使用mapping修改。不過,mapping在這裡還有其他用途,如代碼清單10-3所示:
JsonReader設置mapping進行數據映射
var data = {
id:0,
totalProperty:2,
successProperty:true,
root:[
{id:'id1',name:'name1',descn:'descn1',person:{
id:1,name:'man',sex:'male'
}},
{id:'id2',name:'name2',descn:'descn2',person:{
id:2,name:'woman',sex:'female'
}}
] };
var reader = new Ext.data.JsonReader({
successProperty: "successproperty",
totalProperty: "totalProperty",
root: "root",
id: "id"
}, [
'id','name','descn',
{name:'person_name',mapping:'person.name'},
{name:'person_sex',mapping:'person.sex'}
]);