Store.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. var Emitter = require('./Emitter');
  2. var isStr = require('./isStr');
  3. var isObj = require('./isObj');
  4. var each = require('./each');
  5. var toArr = require('./toArr');
  6. exports = Emitter.extend({
  7. initialize: function Store(data) {
  8. this.callSuper(Emitter, 'initialize', arguments);
  9. this._data = data || {};
  10. this.save(this._data);
  11. },
  12. set: function(key, val) {
  13. var data;
  14. if (isStr(key)) {
  15. data = {};
  16. data[key] = val;
  17. } else if (isObj(key)) {
  18. data = key;
  19. }
  20. var self = this;
  21. each(data, function(val, key) {
  22. var oldVal = self._data[key];
  23. self._data[key] = val;
  24. self.emit('change', key, val, oldVal);
  25. });
  26. this.save(this._data);
  27. },
  28. get: function(key) {
  29. var data = this._data;
  30. if (isStr(key)) return data[key];
  31. var ret = {};
  32. each(key, function(val) {
  33. ret[val] = data[val];
  34. });
  35. return ret;
  36. },
  37. remove: function(key) {
  38. key = toArr(key);
  39. var data = this._data;
  40. each(key, function(val) {
  41. delete data[val];
  42. });
  43. this.save(data);
  44. },
  45. clear: function() {
  46. this._data = {};
  47. this.save(this._data);
  48. },
  49. each: function(fn) {
  50. each(this._data, fn);
  51. },
  52. save: function(data) {
  53. this._data = data;
  54. }
  55. });
  56. module.exports = exports;