There's a problem when the id field is a numeric index into the data array, and the id is in index zero.
this statement:
yields null when (sid == 0). The first truth test on it fails.
The following code works:
this statement:
var id = (sid && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
The following code works:
Ext.extend(Ext.data.ArrayReader, Ext.data.JsonReader, {
readRecords : function(o){
var sid = this.meta ? this.meta.id : undefined; // <-- changed
var recordType = this.recordType, fields = recordType.prototype.fields;
var records = [];
var root = o;
for(var i = 0; i < root.length; i++){
var n = root[i];
var values = {};
var id = ((sid != undefined) && (n[sid] !== "") ? n[sid] : null); // <-- changed
for(var j = 0, jlen = fields.length; j < jlen; j++){
var f = fields.items[j];
var k = f.mapping || j;
var v = n[k] !== undefined ? n[k] : f.defaultValue;
v = f.convert(v);
values[f.name] = v;
}
var record = new recordType(values, id);
record.json = n;
records[records.length] = record;
}
return {
records : records,
totalRecords : records.length
};
}
});
|
#
2
|
|
I am worried about it = undefined (if the id is not present). What about this paranoid check?
var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
|
|
#
3
|
|
Whatever works!
|
本文探讨了ExtJS框架中数组读取器的一个bug,当ID字段为数据数组的数字索引且位于索引0时会出现问题。文中提出了一种解决方案,并讨论了如何正确处理不存在的ID字段。

359

被折叠的 条评论
为什么被折叠?



