Advertisement
Serafim

Untitled

Aug 15th, 2013
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. namespace('ArJs', function() {
  2. return this.Model = (function() {
  3. Model.prototype["private"] = {};
  4.  
  5. Model.prototype.primaryKey = 'id';
  6.  
  7. function Model(data) {
  8. var _this = this;
  9. $.extend(this, ko.mapping.fromJS(data));
  10. this[this.primaryKey].subscribe(function(newval) {
  11. return print(("JSC Fatal Error: Primary key \"" + _this.primaryKey + "\" (" + data.id + " => " + newval + ") ") + ("for model \"" + _this.model.name + "\" has been changed. Это влечёт к полному фейлу индексации данных."), "#900");
  12. });
  13. }
  14.  
  15. Model.setup = function(data) {
  16. var i, _i, _len;
  17. if (this.prototype["private"][this.prototype.model.name] == null) {
  18. this.prototype["private"][this.prototype.model.name] = {
  19. properties: {},
  20. index: []
  21. };
  22. }
  23. for (_i = 0, _len = data.length; _i < _len; _i++) {
  24. i = data[_i];
  25. this.prototype["private"][this.prototype.model.name].properties[i[this.prototype.primaryKey]] = new Models[this.prototype.model.name](i);
  26. this.prototype["private"][this.prototype.model.name].index.push(i.id);
  27. }
  28. return this;
  29. };
  30.  
  31. Model.where = function(conditions, args) {
  32. return (new ArJs.QueryBuilder(this.prototype["private"][this.prototype.model.name].properties)).where(conditions, args);
  33. };
  34.  
  35. Model.find = function(pk) {
  36. if (pk === 'all') {
  37. return this.all();
  38. }
  39. if (pk === 'first') {
  40. return this.first();
  41. }
  42. if (pk === 'last') {
  43. return this.last();
  44. }
  45. return this.prototype["private"][this.prototype.model.name].properties[pk];
  46. };
  47.  
  48. Model.findBy = function(type, val) {
  49. return this.where("" + type + "=%1", [val]).get();
  50. };
  51.  
  52. Model.all = function() {
  53. return this.prototype["private"][this.prototype.model.name].properties;
  54. };
  55.  
  56. Model.first = function() {
  57. var i;
  58. for (i in this.prototype["private"][this.prototype.model.name].properties) {
  59. return this.prototype["private"][this.prototype.model.name].properties[i];
  60. }
  61. };
  62.  
  63. Model.last = function() {
  64. var i;
  65. for (i in this.prototype["private"][this.prototype.model.name].index.reverse()) {
  66. return this.prototype["private"][this.prototype.model.name].properties[this.prototype["private"][this.prototype.model.name].index[i]];
  67. }
  68. };
  69.  
  70. Model.join = function(index, value, data) {
  71. var i, obj;
  72. for (i in this.prototype["private"][this.prototype.model.name].properties) {
  73. obj = this.prototype["private"][this.prototype.model.name].properties[i];
  74. if (data[obj[index]()] != null) {
  75. obj[value] = ko.mapping.fromJS(data[i]);
  76. } else {
  77. obj[value] = ko.mapping.fromJS(0);
  78. }
  79. }
  80. return this;
  81. };
  82.  
  83. Model.clone = function() {
  84. var data, i, obj;
  85. data = [];
  86. for (i in this.prototype["private"][this.prototype.model.name].properties) {
  87. obj = this.prototype["private"][this.prototype.model.name].properties[i];
  88. obj = ko.mapping.toJS(obj);
  89. delete obj.constructor;
  90. data.push(new this.prototype.model.proto(obj));
  91. }
  92. return data;
  93. };
  94.  
  95. Model.prototype.clone = function() {
  96. return new this.model.proto(this.serialize().toJs());
  97. };
  98.  
  99. Model.prototype.serialize = function() {
  100. var _this = this;
  101. return {
  102. toJs: function() {
  103. var obj;
  104. obj = ko.mapping.toJS(_this["private"][_this.model.name].properties[_this[_this.primaryKey]()]);
  105. delete obj.constructor;
  106. return obj;
  107. },
  108. toJson: function() {
  109. var obj;
  110. obj = ko.mapping.toJSON(_this["private"][_this.model.name].properties[_this[_this.primaryKey]()]);
  111. delete obj.constructor;
  112. return obj;
  113. }
  114. };
  115. };
  116.  
  117. return Model;
  118.  
  119. })();
  120. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement