Ext.data.Record前台的"数据库行数据"
2012-02-08 20:34 尔 阅读(272) 评论(0) 收藏 举报注:Record和Store之间存在交叉引用,不能直接序列化Record
//Record的构造函数 Ext.data.Record = function(data, id){ //这里没有用Ext.id()方法,Ext..id()方法用于给UI层提供唯一id this.id = (id || id === 0) ? id : Ext.data.Record.id(this); this.data = data || {}; }; //静态方法,返回Record子类的构造函数 Ext.data.Record.create = function(o){ var f = Ext.extend(Ext.data.Record, {}); var p = f.prototype; //添加一个xt.util.MixedCollection类型的实例属性fields, 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; }; //手动添加数据 set : function(name, value){ //根据是否为基本数据类型,选择不同的编码方式 var encode = Ext.isPrimitive(value) ? String : Ext.encode; //如果data中已经有了这个key-value对,直接返回 if(encode(this.data[name]) == encode(value)) { return; } //脏数据标识 this.dirty = true; //如果没有modified,创建一个挂靠在此Record实例上的js对象 if(!this.modified){ //用来存放修改过的数据 this.modified = {}; } if(this.modified[name] === undefined){ this.modified[name] = this.data[name]; } this.data[name] = value; if(!this.editing){ this.afterEdit(); } }, afterEdit afterReject afterCommit都是私有方法(只是声明为私有,用来被其他实例方法调用,主要和store联动。来更新store对record的维护),不希望被重写 //回滚 reject : function(silent){ var m = this.modified; //从modifie对象里的修改前的数据拿出来,重新放回data里 for(var n in m){ if(typeof m[n] != "function"){ this.data[n] = m[n]; } } //脏数据false this.dirty = false; //删除modifie对象 delete this.modified; this.editing = false; if(silent !== true){ this.afterReject(); } },