##// END OF EJS Templates
wip migrating on new typescript build plugin
wip migrating on new typescript build plugin

File last commit:

r134:511bcc634d65 ioc ts support
r174:b00d3153045c default
Show More
StoreAdapter.js
108 lines | 4.2 KiB | application/javascript | JavascriptGenshiLexer
/ src / amd / js / data / StoreAdapter.js
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;
}
});
});