var DIRTY_PREFIX = '__dt__';
var Cache = function () {
this._contextId = 0;
this._caches = [];
this._context = {};
};
Cache.prototype = {
use: function (contextId, documentSchema) {
var caches = this._caches;
if (!caches[contextId]) {
caches[contextId] = {};
Iif (documentSchema) {
caches[contextId] = documentSchema();
}
}
this._contextId = contextId;
this._context = caches[contextId];
},
put: function (key, value) {
this._context[key] = value;
},
get: function (key) {
return this._context[key];
},
dirty: function (field) {
field = field || '';
var key = DIRTY_PREFIX + field;
this.put(key, true);
},
dirtyAll: function (field) {
field = field || '';
var key = DIRTY_PREFIX + field;
var caches = this._caches;
for (var i = 0; i < caches.length; i++) {
if (caches[i]) {
caches[i][key] = true;
}
}
},
fresh: function (field) {
field = field || '';
var key = DIRTY_PREFIX + field;
this.put(key, false);
},
freshAll: function (field) {
field = field || '';
var key = DIRTY_PREFIX + field;
var caches = this._caches;
for (var i = 0; i < caches.length; i++) {
if (caches[i]) {
caches[i][key] = false;
}
}
},
isDirty: function (field) {
field = field || '';
var key = DIRTY_PREFIX + field;
var context = this._context;
return !context.hasOwnProperty(key)
|| context[key] === true;
},
deleteContext: function (contextId) {
delete this._caches[contextId];
this._context = {};
},
delete: function (key) {
delete this._context[key];
},
clearAll: function () {
this._caches = {};
},
getContext: function () {
return this._context;
},
eachContext : function (cb, context) {
var keys = Object.keys(this._caches);
keys.forEach(function (key) {
cb && cb.call(context, key);
});
},
miss: function (key) {
return ! this._context.hasOwnProperty(key);
}
};
Cache.prototype.constructor = Cache;
export default Cache;
|