Welcome

首页 / 脚本样式 / ExtJS / ExtJs实践:支持“复杂”Json的JsonReader

ExtJs实践:支持“复杂”Json的JsonReader2011-10-29 博客园 tubo从服务端返回如下的JSON:

{Id:2,Name:"Child1",Parent:{Id:1,Name:"Parent"}}

定义了如下的JsonReader来准备显示角色列表,父角色的名称影射成ParentName:

var myReader = new Ext.data.JsonReader({
idProperty: "id"
root: "rows",
totalProperty: "results",

fields: [
{name: "Id"},
{name: "Name"},
{name: "ParentName", mapping: "Parent.Name"}
]
});

当服务端传回来的JSON包含Parent,就如上面的JSON一样,这个reader能正常工作,但是当返回的 JSON中不包含Parent或者Parent为null的时候,列表就不能正常显示了:

{Id:2,Name:"Child1",Parent:null}

大家可能已经猜到mapping:’Parent.Name’也许出了问题,对,Parent为null,怎么能访问Name属性 呢,这个时候 ParentName也应该是null。但是JsonReader并没有考虑到这种情况,查看了JsonReader的 源代码,发现了下面这个方法:

getJsonAccessor: function(){
var re = /[[.]/;
return function(expr) {
try {
return(re.test(expr)) ?
new Function("obj", "return obj." + expr) :
function(obj){
return obj[expr];
};
} catch(e){}
return Ext.emptyFn;
};
}(),