Store.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:7k
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.collections.Store");
- dojo.require("dojo.lang.common");
- dojo.collections.Store = function (jsonArray) {
- var data = [];
- var items = {};
- this.keyField = "Id";
- this.get = function () {
- return data;
- };
- this.getByKey = function (key) {
- return items[key];
- };
- this.getByIndex = function (idx) {
- return data[idx];
- };
- this.getIndexOf = function (key) {
- for (var i = 0; i < data.length; i++) {
- if (data[i].key == key) {
- return i;
- }
- }
- return -1;
- };
- this.getData = function () {
- var arr = [];
- for (var i = 0; i < data.length; i++) {
- arr.push(data[i].src);
- }
- return arr;
- };
- this.getDataByKey = function (key) {
- if (items[key] != null) {
- return items[key].src;
- }
- return null;
- };
- this.getIndexOfData = function (obj) {
- for (var i = 0; i < data.length; i++) {
- if (data[i].src == obj) {
- return i;
- }
- }
- return -1;
- };
- this.getDataByIndex = function (idx) {
- if (data[idx]) {
- return data[idx].src;
- }
- return null;
- };
- this.update = function (obj, fieldPath, val, bDontFire) {
- var parts = fieldPath.split("."), i = 0, o = obj, field;
- if (parts.length > 1) {
- field = parts.pop();
- do {
- if (parts[i].indexOf("()") > -1) {
- var temp = parts[i++].split("()")[0];
- if (!o[temp]) {
- dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
- } else {
- o = o[temp]();
- }
- } else {
- o = o[parts[i++]];
- }
- } while (i < parts.length && o != null);
- } else {
- field = parts[0];
- }
- obj[field] = val;
- if (!bDontFire) {
- this.onUpdateField(obj, fieldPath, val);
- }
- };
- this.forEach = function (fn) {
- if (Array.forEach) {
- Array.forEach(data, fn, this);
- } else {
- for (var i = 0; i < data.length; i++) {
- fn.call(this, data[i]);
- }
- }
- };
- this.forEachData = function (fn) {
- if (Array.forEach) {
- Array.forEach(this.getData(), fn, this);
- } else {
- var a = this.getData();
- for (var i = 0; i < a.length; i++) {
- fn.call(this, a[i]);
- }
- }
- };
- this.setData = function (arr, bDontFire) {
- data = [];
- for (var i = 0; i < arr.length; i++) {
- var o = {key:arr[i][this.keyField], src:arr[i]};
- data.push(o);
- items[o.key] = o;
- }
- if (!bDontFire) {
- this.onSetData();
- }
- };
- this.clearData = function (bDontFire) {
- data = [];
- items = {};
- if (!bDontFire) {
- this.onClearData();
- }
- };
- this.addData = function (obj, key, bDontFire) {
- var k = key || obj[this.keyField];
- if (items[k] != null) {
- var o = items[k];
- o.src = obj;
- } else {
- var o = {key:k, src:obj};
- data.push(o);
- items[o.key] = o;
- }
- if (!bDontFire) {
- this.onAddData(o);
- }
- };
- this.addDataRange = function (arr, bDontFire) {
- var objects = [];
- for (var i = 0; i < arr.length; i++) {
- var k = arr[i][this.keyField];
- if (items[k] != null) {
- var o = items[k];
- o.src = arr[i];
- } else {
- var o = {key:k, src:arr[i]};
- data.push(o);
- items[k] = o;
- }
- objects.push(o);
- }
- if (!bDontFire) {
- this.onAddDataRange(objects);
- }
- };
- this.addDataByIndex = function (obj, idx, key, bDontFire) {
- var k = key || obj[this.keyField];
- if (items[k] != null) {
- var i = this.getIndexOf(k);
- var o = data.splice(i, 1);
- o.src = obj;
- } else {
- var o = {key:k, src:obj};
- items[k] = o;
- }
- data.splice(idx, 0, o);
- if (!bDontFire) {
- this.onAddData(o);
- }
- };
- this.addDataRangeByIndex = function (arr, idx, bDontFire) {
- var objects = [];
- for (var i = 0; i < arr.length; i++) {
- var k = arr[i][this.keyField];
- if (items[k] != null) {
- var j = this.getIndexOf(k);
- var o = data.splice(j, 1);
- o.src = arr[i];
- } else {
- var o = {key:k, src:arr[i]};
- items[k] = o;
- }
- objects.push(o);
- }
- data.splice(idx, 0, objects);
- if (!bDontFire) {
- this.onAddDataRange(objects);
- }
- };
- this.removeData = function (obj, bDontFire) {
- var idx = -1;
- var o = null;
- for (var i = 0; i < data.length; i++) {
- if (data[i].src == obj) {
- idx = i;
- o = data[i];
- break;
- }
- }
- if (!bDontFire) {
- this.onRemoveData(o);
- }
- if (idx > -1) {
- data.splice(idx, 1);
- delete items[o.key];
- }
- };
- this.removeDataRange = function (idx, range, bDontFire) {
- var ret = data.splice(idx, range);
- for (var i = 0; i < ret.length; i++) {
- delete items[ret[i].key];
- }
- if (!bDontFire) {
- this.onRemoveDataRange(ret);
- }
- return ret;
- };
- this.removeDataByKey = function (key, bDontFire) {
- this.removeData(this.getDataByKey(key), bDontFire);
- };
- this.removeDataByIndex = function (idx, bDontFire) {
- this.removeData(this.getDataByIndex(idx), bDontFire);
- };
- if (jsonArray && jsonArray.length && jsonArray[0]) {
- this.setData(jsonArray, true);
- }
- };
- dojo.extend(dojo.collections.Store, {getField:function (obj, field) {
- var parts = field.split("."), i = 0, o = obj;
- do {
- if (parts[i].indexOf("()") > -1) {
- var temp = parts[i++].split("()")[0];
- if (!o[temp]) {
- dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
- } else {
- o = o[temp]();
- }
- } else {
- o = o[parts[i++]];
- }
- } while (i < parts.length && o != null);
- if (i < parts.length) {
- dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");
- }
- return o;
- }, getFromHtml:function (meta, body, fnMod) {
- var rows = body.rows;
- var ctor = function (row) {
- var obj = {};
- for (var i = 0; i < meta.length; i++) {
- var o = obj;
- var data = row.cells[i].innerHTML;
- var p = meta[i].getField();
- if (p.indexOf(".") > -1) {
- p = p.split(".");
- while (p.length > 1) {
- var pr = p.shift();
- o[pr] = {};
- o = o[pr];
- }
- p = p[0];
- }
- var type = meta[i].getType();
- if (type == String) {
- o[p] = data;
- } else {
- if (data) {
- o[p] = new type(data);
- } else {
- o[p] = new type();
- }
- }
- }
- return obj;
- };
- var arr = [];
- for (var i = 0; i < rows.length; i++) {
- var o = ctor(rows[i]);
- if (fnMod) {
- fnMod(o, rows[i]);
- }
- arr.push(o);
- }
- return arr;
- }, onSetData:function () {
- }, onClearData:function () {
- }, onAddData:function (obj) {
- }, onAddDataRange:function (arr) {
- }, onRemoveData:function (obj) {
- }, onRemoveDataRange:function (arr) {
- }, onUpdateField:function (obj, field, val) {
- }});