Ext中类的定义:
var TestClass= new Ext.data.Record.create([{ name: 'id', type: 'int', mapping: 'ID' },{ name: 'name', type: 'string', mapping: 'Name' }]);
创建一条新记录:
var myObj = new TestClass({id : 3});
取对象的属性值:
alert(myObj.get('name')); // undefined alert(myObj.get('noProperty')); // undefined
查看Ext.Record源码:
Ext.data.Record = function(data, id){ this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID; this.data = data; // 注意1 }; Ext.data.Record.create = function(o){ var f = Ext.extend(Ext.data.Record, {}); // 注意2 var p = f.prototype; p.fields = new Ext.util.MixedCollection(false, function(field){ return field.name; }); for(var i = 0, len = o.length; i < len; i++){ p.fields.add(new Ext.data.Field(o[i])); } f.getField = function(name){ return p.fields.get(name); }; return f; // 注意3 };
从源码可以看出,Record其实就是有id属性的Object。 Record.create就是创建一个Record的子类型。
再次查找源码,Record.get()方法:
get : function(name){ return this.data[name]; },
相当于,如下方法:
var obj ={}; alert(obj.name); // undefined
综上,方法中判断Record类型参数,某个属性是否存在值的方法为:
if((typeof rec !== 'undefined') && (rec !== null) && (typeof rec.get('name') !== 'undefined')){ // do something.. }