##// END OF EJS Templates
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version

File last commit:

r134:511bcc634d65 ioc ts support
r146:f3f5c56d3b3e v1.4.0-rc5 default
Show More
StoreAdapter.js
108 lines | 4.2 KiB | application/javascript | JavascriptGenshiLexer
/ src / amd / js / data / StoreAdapter.js
cin
working version...
r51 define([
"dojo/_base/declare",
"../safe",
"dojo/when",
"dojo/store/util/QueryResults" ],
function(declare, safe, when, QueryResults) {
"use strict";
/**
* Обертка вокруг произвольного хранилища, только для чтения. Используется
* для преобразования данных, например, отображения в списках элементов
* пространственных данных.
*/
return declare(null, {
/**
* @type{String} Свойство, хранящее идентификатор
*/
idProperty : null,
_store : null,
/**
* @param{String} opts.idProperty Имя свойства, в которое будет записан
* идентификатор, если не указан, то идентификатор будет
* взят из родительского хранилища или использоваться
* строка <code>id</code>
* @param{dojo.store} opts.store Родительское хранилище
*/
constructor : function(opts) {
safe.argumentNotNull(opts, "opts");
safe.argumentNotNull(opts.store, "opts.store");
this._store = opts.store;
delete opts.store;
declare.safeMixin(this, opts);
this.idProperty = opts.idProperty || this._store.idProperty || "id";
},
getParentStore : function() {
return this._store;
},
get : function(id) {
var me = this;
return when(me._store.get(id), function(x) {
var m = me.mapItem(x);
if (!(me.idProperty in m))
m[me.idProperty] = id;
return m;
});
},
/**
* Выполняет запрос в родительском хранилище, для этого используется
* <code>translateQuery</code> для подготовки запроса, затем,
* <code>mapItem</code> для преобразования результатов.
*/
query : function(q, options) {
var me = this, store = this._store;
return when(store.query(me.translateQuery(q), me
.translateOptions(options)), function(res) {
var total = res.total;
var mapped = res.map(function(x) {
var m = me.mapItem(x);
if (!(me.idProperty in m))
m[me.idProperty] = store.getIdentity &&
store.getIdentity(x);
return m;
});
mapped.total = total;
var results = new QueryResults(mapped);
return results;
});
},
getIdentity : function(obj) {
return obj && obj[this.idProperty];
},
/**
* Преобразование запроса в формат родительского хранилища.
*
* @param{Object} q Запрос в формате текущего хранилища
* @returns{Object} Запрос в формате родительского хранилища
*/
translateQuery : function(q) {
return q;
},
translateOptions : function(options) {
return options;
},
/**
* Преобразование объекта из родительского хранилища. При преобразовании
* в объекте можно задать идентификатор, иначе идентификатор будет
* автоматически получен и присвоен из родительского хранилища
*
* @param{Object} item Объект из родительского хранилища
* @returns{Object} результат преобразования
*/
mapItem : function(item) {
return item;
}
});
});