Mercurial > pub > ImplabJs
comparison core/src/js/data/declare-model.js @ 34:27e8e9e38e07 default tip
Слияние
| author | nickolay | 
|---|---|
| date | Wed, 05 Jun 2019 20:44:15 +0300 | 
| parents | acdcdf1a8d21 | 
| children | 
   comparison
  equal
  deleted
  inserted
  replaced
| 33:8af8e840dd49 | 34:27e8e9e38e07 | 
|---|---|
| 1 define([ "dojo/_base/declare", "./_ModelBase", "./MapSchema" ], function( | |
| 2 declare, _ModelBase, MapSchema) { | |
| 3 /** | |
| 4 * Создает новый класс, унаследованный от ./ModelBase, с указанной схемой | |
| 5 * отображения данных. | |
| 6 * | |
| 7 * @details Модель представляет собой объект, живущий в рамках контекста | |
| 8 * данных, также имеющий две схемы отображения: из модели хранения | |
| 9 * в источнике данных (toObjectMap) и наооборот в модель хранения в | |
| 10 * источнике данных (fromObjectMap). | |
| 11 * | |
| 12 * Описание схемы выглядит следующим образом | |
| 13 * <pre> | |
| 14 * { | |
| 15 * name : null, // отображение в обе стороны без преобразования | |
| 16 * | |
| 17 * age : Number, // при преобразоваении к объекту поле будет преобразовано dst.age = Number(src.age) | |
| 18 * // обратное преобразование отсутстсвует | |
| 19 * | |
| 20 * age : [Number, null] // тоже самое что и age : Number | |
| 21 * | |
| 22 * date : [Date, function(v) { return v.toString() }] // указывается преобразование в одну и в другую сторону | |
| 23 * } | |
| 24 * <pre> | |
| 25 */ | |
| 26 return function(schema, mixins, opts) { | |
| 27 var fromObjectSchema = {}, toObjectSchema = {}; | |
| 28 if (schema !== null && schema !== undefined) { | |
| 29 for ( var p in schema) { | |
| 30 var mapper = schema[p]; | |
| 31 | |
| 32 if (mapper instanceof Array) { | |
| 33 toObjectSchema[p] = mapper[0]; | |
| 34 fromObjectSchema[p] = mapper[1]; | |
| 35 } else { | |
| 36 toObjectSchema[p] = mapper; | |
| 37 fromObjectSchema[p] = null; | |
| 38 } | |
| 39 } | |
| 40 } | |
| 41 | |
| 42 if (arguments.length < 3) { | |
| 43 opts = mixins; | |
| 44 mixins = undefined; | |
| 45 } | |
| 46 | |
| 47 var base = [ _ModelBase ]; | |
| 48 if (mixins) { | |
| 49 if (mixins instanceof Array) | |
| 50 base = base.concat(mixins); | |
| 51 else | |
| 52 base.push(mixins); | |
| 53 } | |
| 54 | |
| 55 var model = declare(base, opts); | |
| 56 | |
| 57 model.toObjectMap = new MapSchema(toObjectSchema); | |
| 58 | |
| 59 model.fromObjectMap = new MapSchema(fromObjectSchema); | |
| 60 | |
| 61 model.readData = function(that, data, context) { | |
| 62 model.toObjectMap.map(data, that, context); | |
| 63 }; | |
| 64 | |
| 65 model.writeData = function(that, data, context) { | |
| 66 data = data || {}; | |
| 67 model.fromObjectMap.map(that, data, context); | |
| 68 }; | |
| 69 | |
| 70 return model; | |
| 71 }; | |
| 72 }); | 
