##// END OF EJS Templates
tests moved under src/ folder...
tests moved under src/ folder removed requirejs dependency from the main source set

File last commit:

r49:1a91da7b15f7 di-typescript
r50:7a4fac383b10 di-typescript
Show More
declare-model.js
71 lines | 2.8 KiB | application/javascript | JavascriptLexer
/ src / main / js / data / declare-model.js
cin
changed the project structure
r49 define([ "dojo/_base/declare", "./_ModelBase", "./MapSchema" ], function(
declare, _ModelBase, MapSchema) {
/**
* Создает новый класс, унаследованный от ./ModelBase, с указанной схемой
* отображения данных.
*
* @details Модель представляет собой объект, живущий в рамках контекста
* данных, также имеющий две схемы отображения: из модели хранения
* в источнике данных (toObjectMap) и наооборот в модель хранения в
* источнике данных (fromObjectMap).
*
* Описание схемы выглядит следующим образом
* <pre>
* {
* name : null, // отображение в обе стороны без преобразования
*
* age : Number, // при преобразоваении к объекту поле будет преобразовано dst.age = Number(src.age)
* // обратное преобразование отсутстсвует
*
* age : [Number, null] // тоже самое что и age : Number
*
* date : [Date, function(v) { return v.toString() }] // указывается преобразование в одну и в другую сторону
* }
* <pre>
*/
return function(schema, mixins, opts) {
var fromObjectSchema = {}, toObjectSchema = {};
if (schema !== null && schema !== undefined) {
for ( var p in schema) {
var mapper = schema[p];
if (mapper instanceof Array) {
toObjectSchema[p] = mapper[0];
fromObjectSchema[p] = mapper[1];
} else {
toObjectSchema[p] = mapper;
fromObjectSchema[p] = null;
}
}
}
if (arguments.length < 3) {
opts = mixins;
mixins = undefined;
}
var base = [ _ModelBase ];
if (mixins) {
if (mixins instanceof Array)
base = base.concat(mixins);
else
base.push(mixins);
}
var model = declare(base, opts);
model.toObjectMap = new MapSchema(toObjectSchema);
model.fromObjectMap = new MapSchema(fromObjectSchema);
model.readData = function(that, data, context) {
model.toObjectMap.map(data, that, context);
};
model.writeData = function(that, data, context) {
data = data || {};
model.fromObjectMap.map(that, data, context);
};
return model;
};
});