Mercurial > pub > ImplabJs
diff src/implab/data/StoreAdapter.js @ 34:27e8e9e38e07 default tip
Слияние
author | nickolay |
---|---|
date | Wed, 05 Jun 2019 20:44:15 +0300 |
parents | 8af8e840dd49 1dc2fd263b90 |
children |
line wrap: on
line diff
--- a/src/implab/data/StoreAdapter.js Wed Jun 05 17:44:17 2019 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -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); - console.log(results); - 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; - } - }); - -}); \ No newline at end of file