/**
* Created by seeker910 on 2017/4/22.
* @description 内存缓存
* @description 动态缓存,缓存时间在关闭页面前始终有效
* @description 对象在缓存中,则在缓存中获取,
* @description 对象不在缓存中,则向服务端请求获取,并在获取后存入缓存中。
*/
Rsd.define('Rsd.data.Cache', {
extend: 'Rsd.common.Object',
xtype: 'cache',
/*
数据源代理
可以是Rsd.common.Service,也可以是用于创建Rsd.common.Service的参数config对象{}
* */
proxy:{},
/**
* 缓存方式:memory,application,
* @param {*} config
*/
//cacheType:'',
//cacheType == memory 时,数据存储容器
//container:'',
/*
* */
constructor: function Store(config) {
config = config || {};
this.apply(config);
if(!Rsd.isObject(this.container ))
{
this.container={};
}
},
/**
* @description 用于动态【逐条】加载缓存数据
* @param {*} args
* @param {*} callback
*/
load:function load(args,callback)
{
var me = this;
var _args = args || {};
if(Rsd.isEmpty(me.keyName))
{
Rsd.error("Rsd.data.Cache对象未设置keyName属性,数据无法被缓存。");
}
var _callback = function _cache_callback(resp)
{
//debugger;
if(resp.success)
{
var data = resp.data;
var list=[];
var key = data[me.keyName]
if(Rsd.isEmpty(key))
{
Rsd.error("对象"+me.keyName+"属性值为空,数据无法被缓存。");
}
else
{
if(me.container[key]){
me.container[key].data = data||{};
list = me.container[key].callbacks||[];
}else
{
me.container[key] = {data:data,callbacks:[]};
}
for(var i in list)
{
Rsd.callFunction(me,list[i],[data]);
}
//处理请求结束回调
if(callback)
{
Rsd.callFunction(me,callback,[data]);
}
}
}
}
me.proxy = me.proxy || {};
// debugger;
if(me.proxy instanceof Rsd.data.Service){
me.proxy.request(_args,_callback);
}
else
{
me.proxy.url = me.proxy.url || me.url;
Rsd.httpRequest(me.proxy ,_args,_callback);
}
},
/**
* @prama args 必须包含keyName对映字段。
* */
get:function get(key,callback) {
var me = this;
if(key == undefined || key == null || key == "" )
{
throw new Error("参数key值无效:不允许为空。");
}
//debugger;
if(this.container.hasOwnProperty(key))
{
if(this.container[key].data)
{
Rsd.callFunction(this,callback,[this.container[key].data]);
}
else
{
this.container[key].callbacks.push(callback);
}
}
else
{
this.container[key] = {callbacks:[],data:null};
//对象不存在时 注册回调方法,在获取到数据时再次回调
this.container[key].callbacks.push(callback);
}
},
/**
* */
clear:function () {
this.container={};
},
/**
* */
remove:function (key) {
delete this.container[key];
}
},function (type) {
//存储容器
var _containerGetter = function () {
if (!this.hasOwnProperty('__container')) {
this.__container = {};
}
return this.__container;
};
var _containerSetter = function (value) {
if(Rsd.isObject(value))
{
this.__container = this.__container||{};
Rsd.apply(this.__container,value);
}
};
this.defineProperty(type,"container", _containerGetter, _containerSetter,true);
//缓存方式
var _cacheTypeGetter = function () {
if (!this.hasOwnProperty('__cacheType')) {
this.__cacheType = 'memory';
}
return this.__cacheType;
};
var _cacheTypeSetter = function (value) {
this.__cacheType =value;
};
this.defineProperty(type,"cacheType", _cacheTypeGetter, _cacheTypeSetter,true);
});