Store.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:7k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.collections.Store");
  9. dojo.require("dojo.lang.common");
  10. dojo.collections.Store = function (jsonArray) {
  11. var data = [];
  12. var items = {};
  13. this.keyField = "Id";
  14. this.get = function () {
  15. return data;
  16. };
  17. this.getByKey = function (key) {
  18. return items[key];
  19. };
  20. this.getByIndex = function (idx) {
  21. return data[idx];
  22. };
  23. this.getIndexOf = function (key) {
  24. for (var i = 0; i < data.length; i++) {
  25. if (data[i].key == key) {
  26. return i;
  27. }
  28. }
  29. return -1;
  30. };
  31. this.getData = function () {
  32. var arr = [];
  33. for (var i = 0; i < data.length; i++) {
  34. arr.push(data[i].src);
  35. }
  36. return arr;
  37. };
  38. this.getDataByKey = function (key) {
  39. if (items[key] != null) {
  40. return items[key].src;
  41. }
  42. return null;
  43. };
  44. this.getIndexOfData = function (obj) {
  45. for (var i = 0; i < data.length; i++) {
  46. if (data[i].src == obj) {
  47. return i;
  48. }
  49. }
  50. return -1;
  51. };
  52. this.getDataByIndex = function (idx) {
  53. if (data[idx]) {
  54. return data[idx].src;
  55. }
  56. return null;
  57. };
  58. this.update = function (obj, fieldPath, val, bDontFire) {
  59. var parts = fieldPath.split("."), i = 0, o = obj, field;
  60. if (parts.length > 1) {
  61. field = parts.pop();
  62. do {
  63. if (parts[i].indexOf("()") > -1) {
  64. var temp = parts[i++].split("()")[0];
  65. if (!o[temp]) {
  66. dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
  67. } else {
  68. o = o[temp]();
  69. }
  70. } else {
  71. o = o[parts[i++]];
  72. }
  73. } while (i < parts.length && o != null);
  74. } else {
  75. field = parts[0];
  76. }
  77. obj[field] = val;
  78. if (!bDontFire) {
  79. this.onUpdateField(obj, fieldPath, val);
  80. }
  81. };
  82. this.forEach = function (fn) {
  83. if (Array.forEach) {
  84. Array.forEach(data, fn, this);
  85. } else {
  86. for (var i = 0; i < data.length; i++) {
  87. fn.call(this, data[i]);
  88. }
  89. }
  90. };
  91. this.forEachData = function (fn) {
  92. if (Array.forEach) {
  93. Array.forEach(this.getData(), fn, this);
  94. } else {
  95. var a = this.getData();
  96. for (var i = 0; i < a.length; i++) {
  97. fn.call(this, a[i]);
  98. }
  99. }
  100. };
  101. this.setData = function (arr, bDontFire) {
  102. data = [];
  103. for (var i = 0; i < arr.length; i++) {
  104. var o = {key:arr[i][this.keyField], src:arr[i]};
  105. data.push(o);
  106. items[o.key] = o;
  107. }
  108. if (!bDontFire) {
  109. this.onSetData();
  110. }
  111. };
  112. this.clearData = function (bDontFire) {
  113. data = [];
  114. items = {};
  115. if (!bDontFire) {
  116. this.onClearData();
  117. }
  118. };
  119. this.addData = function (obj, key, bDontFire) {
  120. var k = key || obj[this.keyField];
  121. if (items[k] != null) {
  122. var o = items[k];
  123. o.src = obj;
  124. } else {
  125. var o = {key:k, src:obj};
  126. data.push(o);
  127. items[o.key] = o;
  128. }
  129. if (!bDontFire) {
  130. this.onAddData(o);
  131. }
  132. };
  133. this.addDataRange = function (arr, bDontFire) {
  134. var objects = [];
  135. for (var i = 0; i < arr.length; i++) {
  136. var k = arr[i][this.keyField];
  137. if (items[k] != null) {
  138. var o = items[k];
  139. o.src = arr[i];
  140. } else {
  141. var o = {key:k, src:arr[i]};
  142. data.push(o);
  143. items[k] = o;
  144. }
  145. objects.push(o);
  146. }
  147. if (!bDontFire) {
  148. this.onAddDataRange(objects);
  149. }
  150. };
  151. this.addDataByIndex = function (obj, idx, key, bDontFire) {
  152. var k = key || obj[this.keyField];
  153. if (items[k] != null) {
  154. var i = this.getIndexOf(k);
  155. var o = data.splice(i, 1);
  156. o.src = obj;
  157. } else {
  158. var o = {key:k, src:obj};
  159. items[k] = o;
  160. }
  161. data.splice(idx, 0, o);
  162. if (!bDontFire) {
  163. this.onAddData(o);
  164. }
  165. };
  166. this.addDataRangeByIndex = function (arr, idx, bDontFire) {
  167. var objects = [];
  168. for (var i = 0; i < arr.length; i++) {
  169. var k = arr[i][this.keyField];
  170. if (items[k] != null) {
  171. var j = this.getIndexOf(k);
  172. var o = data.splice(j, 1);
  173. o.src = arr[i];
  174. } else {
  175. var o = {key:k, src:arr[i]};
  176. items[k] = o;
  177. }
  178. objects.push(o);
  179. }
  180. data.splice(idx, 0, objects);
  181. if (!bDontFire) {
  182. this.onAddDataRange(objects);
  183. }
  184. };
  185. this.removeData = function (obj, bDontFire) {
  186. var idx = -1;
  187. var o = null;
  188. for (var i = 0; i < data.length; i++) {
  189. if (data[i].src == obj) {
  190. idx = i;
  191. o = data[i];
  192. break;
  193. }
  194. }
  195. if (!bDontFire) {
  196. this.onRemoveData(o);
  197. }
  198. if (idx > -1) {
  199. data.splice(idx, 1);
  200. delete items[o.key];
  201. }
  202. };
  203. this.removeDataRange = function (idx, range, bDontFire) {
  204. var ret = data.splice(idx, range);
  205. for (var i = 0; i < ret.length; i++) {
  206. delete items[ret[i].key];
  207. }
  208. if (!bDontFire) {
  209. this.onRemoveDataRange(ret);
  210. }
  211. return ret;
  212. };
  213. this.removeDataByKey = function (key, bDontFire) {
  214. this.removeData(this.getDataByKey(key), bDontFire);
  215. };
  216. this.removeDataByIndex = function (idx, bDontFire) {
  217. this.removeData(this.getDataByIndex(idx), bDontFire);
  218. };
  219. if (jsonArray && jsonArray.length && jsonArray[0]) {
  220. this.setData(jsonArray, true);
  221. }
  222. };
  223. dojo.extend(dojo.collections.Store, {getField:function (obj, field) {
  224. var parts = field.split("."), i = 0, o = obj;
  225. do {
  226. if (parts[i].indexOf("()") > -1) {
  227. var temp = parts[i++].split("()")[0];
  228. if (!o[temp]) {
  229. dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
  230. } else {
  231. o = o[temp]();
  232. }
  233. } else {
  234. o = o[parts[i++]];
  235. }
  236. } while (i < parts.length && o != null);
  237. if (i < parts.length) {
  238. dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");
  239. }
  240. return o;
  241. }, getFromHtml:function (meta, body, fnMod) {
  242. var rows = body.rows;
  243. var ctor = function (row) {
  244. var obj = {};
  245. for (var i = 0; i < meta.length; i++) {
  246. var o = obj;
  247. var data = row.cells[i].innerHTML;
  248. var p = meta[i].getField();
  249. if (p.indexOf(".") > -1) {
  250. p = p.split(".");
  251. while (p.length > 1) {
  252. var pr = p.shift();
  253. o[pr] = {};
  254. o = o[pr];
  255. }
  256. p = p[0];
  257. }
  258. var type = meta[i].getType();
  259. if (type == String) {
  260. o[p] = data;
  261. } else {
  262. if (data) {
  263. o[p] = new type(data);
  264. } else {
  265. o[p] = new type();
  266. }
  267. }
  268. }
  269. return obj;
  270. };
  271. var arr = [];
  272. for (var i = 0; i < rows.length; i++) {
  273. var o = ctor(rows[i]);
  274. if (fnMod) {
  275. fnMod(o, rows[i]);
  276. }
  277. arr.push(o);
  278. }
  279. return arr;
  280. }, onSetData:function () {
  281. }, onClearData:function () {
  282. }, onAddData:function (obj) {
  283. }, onAddDataRange:function (arr) {
  284. }, onRemoveData:function (obj) {
  285. }, onRemoveDataRange:function (arr) {
  286. }, onUpdateField:function (obj, field, val) {
  287. }});