Ruby's Louvre

每天学习一点点算法

导航

mass Framework data模块

mass Framework的内存对象缓存系统,它会在目标对象或目标对象对应的代理对象添加一个uniqueID ,用于关链相应的缓存体。通过dom.data把数据储存到相应的缓存体中去。

//==================================================
// 数据缓存模块
//==================================================
(function(global,DOC){
    var dom = global[DOC.URL.replace(/(#.+|\W)/g,'')];
    dom.define("data", "lang", function(){
        dom.log("已加载data模块");
        var remitter = /object|function/
        dom.mix(dom,{
            memcache:{},
            /*
             * @param {Any} target
             * @param {String|Object} name
             * @param {Any} data
             **/
            data : function( target, name, data, pvt ) {
                if(target && remitter.test(typeof target)){
                    var id = target.uniqueNumber || (target.uniqueNumber=++dom["@uuid"]);
                    if(name === "@uuid"){
                        return id;
                    }
                    var memcache = target.nodeType === 1 ? dom.memcache: target;
                    var table = memcache[ "@data_"+id ] || (memcache[ "@data_"+id ] = {});
                    if ( !pvt ) {
                        table = table.data || (table.data = {});
                    }
                    var getByName = typeof name === "string";
                    if ( name && typeof name == "object" ) {
                        dom.mix(table, name);
                    }else if(getByName && data !== void 0){
                        table[ name ] = data;
                    }
                    return getByName ? table[ name ] : table;
                }
            },
            _data:function(target,name,data){
                return dom.data(target, name, data, true)
            },
            /*
             * @param {Any} target
             * @param {String|Opt} name
             **/
            removeData : function(target, name, pvt){
                if(target && remitter.test(typeof target)){
                    var id = target.uniqueNumber;
                    if (  !id ) {
                        return;
                    }
                    var memcache = target.nodeType === 1  ? dom.memcache : target;
                    var table = memcache["@data_"+id], clear = 1, ret = typeof name == "string" ;
                    if ( table && ret ) {
                        if(!pvt){
                            table = table.data
                        }
                        if(table){
                            ret = table[ name ];
                            delete table[ name ];
                        }
                        var cache = memcache["@data_"+id];
                            loop:
                            for(var key in cache){
                                if(key == "data"){
                                    for(var i in cache.data){
                                        clear = 0;
                                        break loop;
                                    }
                                }else{
                                    clear = 0;
                                    break loop;
                                }
                            }
                    }
                    if(clear){
                        delete memcache["@data_"+id];
                    }
                    return ret;
                }
            },
            /*
             *把对象dest的数据缓存体合并到src的数据缓存体上
             * @param {Any} target
             * @param {String|Opt} name
             **/
            mergeData:function(clone, src){
                  var srcData = dom._data(src), cloneData = dom._data(clone);
                if(srcData && cloneData){
                    dom.Object.merge.call(cloneData, srcData);
                }
            }
        });
    });
})(this,this.document);
//2011.9.27 uniqueID改为uniqueNumber 简化data与removeData
//2011.9.28 添加dom._data处理内部数据

示例


      dom.require("data",function(){
        var a = {};
        //写入数揣
        dom.data(a,"name","司徒正美");
        //读取数据
        dom.log(a);//{ uniqueNumber:2, "@data_2":{data:{name:"司徒正美"}} }
        var b = {};
        dom.data(b,"sex","man");
        //合并数据
        dom.mergeData(b,a);
        dom.log(b);//{ uniqueNumber:3, "@data_3":{data:{name:"司徒正美",sex:"man"}} }
        //删除数据
        dom.removeData(b,"name");
        dom.log(b);//{ uniqueNumber:3, "@data_3":{data:{sex:"man"}} }
        dom.data(b,"inner","innerHTML",true);
        dom.log(b);//{ uniqueNumber:3, "@data_3":{inner:"innerHTML",data:{sex:"man"}} }
      });

posted on 2011-07-21 09:50  司徒正美  阅读(999)  评论(0编辑  收藏  举报