Ext.data.Record前台的"数据库行数据"

博客探讨了Ext.data.Record如何在前端模拟数据库行数据的操作,包括读取、修改及删除等,强调了Record与Store的交互,并指出由于交叉引用问题,Record无法直接序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:RecordStore之间存在交叉引用,不能直接序列化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();
        }
	},



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值