Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace('ArJs', function() {
- return this.Model = (function() {
- Model.prototype["private"] = {};
- Model.prototype.primaryKey = 'id';
- function Model(data) {
- var _this = this;
- $.extend(this, ko.mapping.fromJS(data));
- this[this.primaryKey].subscribe(function(newval) {
- return print(("JSC Fatal Error: Primary key \"" + _this.primaryKey + "\" (" + data.id + " => " + newval + ") ") + ("for model \"" + _this.model.name + "\" has been changed. Это влечёт к полному фейлу индексации данных."), "#900");
- });
- }
- Model.setup = function(data) {
- var i, _i, _len;
- if (this.prototype["private"][this.prototype.model.name] == null) {
- this.prototype["private"][this.prototype.model.name] = {
- properties: {},
- index: []
- };
- }
- for (_i = 0, _len = data.length; _i < _len; _i++) {
- i = data[_i];
- this.prototype["private"][this.prototype.model.name].properties[i[this.prototype.primaryKey]] = new Models[this.prototype.model.name](i);
- this.prototype["private"][this.prototype.model.name].index.push(i.id);
- }
- return this;
- };
- Model.where = function(conditions, args) {
- return (new ArJs.QueryBuilder(this.prototype["private"][this.prototype.model.name].properties)).where(conditions, args);
- };
- Model.find = function(pk) {
- if (pk === 'all') {
- return this.all();
- }
- if (pk === 'first') {
- return this.first();
- }
- if (pk === 'last') {
- return this.last();
- }
- return this.prototype["private"][this.prototype.model.name].properties[pk];
- };
- Model.findBy = function(type, val) {
- return this.where("" + type + "=%1", [val]).get();
- };
- Model.all = function() {
- return this.prototype["private"][this.prototype.model.name].properties;
- };
- Model.first = function() {
- var i;
- for (i in this.prototype["private"][this.prototype.model.name].properties) {
- return this.prototype["private"][this.prototype.model.name].properties[i];
- }
- };
- Model.last = function() {
- var i;
- for (i in this.prototype["private"][this.prototype.model.name].index.reverse()) {
- return this.prototype["private"][this.prototype.model.name].properties[this.prototype["private"][this.prototype.model.name].index[i]];
- }
- };
- Model.join = function(index, value, data) {
- var i, obj;
- for (i in this.prototype["private"][this.prototype.model.name].properties) {
- obj = this.prototype["private"][this.prototype.model.name].properties[i];
- if (data[obj[index]()] != null) {
- obj[value] = ko.mapping.fromJS(data[i]);
- } else {
- obj[value] = ko.mapping.fromJS(0);
- }
- }
- return this;
- };
- Model.clone = function() {
- var data, i, obj;
- data = [];
- for (i in this.prototype["private"][this.prototype.model.name].properties) {
- obj = this.prototype["private"][this.prototype.model.name].properties[i];
- obj = ko.mapping.toJS(obj);
- delete obj.constructor;
- data.push(new this.prototype.model.proto(obj));
- }
- return data;
- };
- Model.prototype.clone = function() {
- return new this.model.proto(this.serialize().toJs());
- };
- Model.prototype.serialize = function() {
- var _this = this;
- return {
- toJs: function() {
- var obj;
- obj = ko.mapping.toJS(_this["private"][_this.model.name].properties[_this[_this.primaryKey]()]);
- delete obj.constructor;
- return obj;
- },
- toJson: function() {
- var obj;
- obj = ko.mapping.toJSON(_this["private"][_this.model.name].properties[_this[_this.primaryKey]()]);
- delete obj.constructor;
- return obj;
- }
- };
- };
- return Model;
- })();
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement