从服务端返回如下的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;
};
}(),