Small problem in ArrayReader.js - Ext JS

本文探讨了ExtJS框架中数组读取器的一个bug,当ID字段为数据数组的数字索引且位于索引0时会出现问题。文中提出了一种解决方案,并讨论了如何正确处理不存在的ID字段。
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:

	        var id = (sid && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
yields null when (sid == 0). The first truth test on it fails.

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
	    };
    }
});
Reply With Quote
  #2  
Old 02-23-2007, 09:48 AM
Default

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);
Reply With Quote
  #3  
Old 02-23-2007, 10:55 AM
Default

Whatever works!
Reply With Quote
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值