zent
Version:
一套前端设计语言和基于React的实现
95 lines (65 loc) • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _assign = require('lodash/assign');
var _assign2 = _interopRequireDefault(_assign);
var _get = require('lodash/get');
var _get2 = _interopRequireDefault(_get);
var _has = require('lodash/has');
var _has2 = _interopRequireDefault(_has);
var _indexOf = require('lodash/indexOf');
var _indexOf2 = _interopRequireDefault(_indexOf);
var _isArray = require('lodash/isArray');
var _isArray2 = _interopRequireDefault(_isArray);
var _keys = require('lodash/keys');
var _keys2 = _interopRequireDefault(_keys);
var _forEach = require('lodash/forEach');
var _forEach2 = _interopRequireDefault(_forEach);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var Store = function Store() {
var _this = this;
(0, _classCallCheck3['default'])(this, Store);
this.setState = function (nextState) {
_this.state = (0, _assign2['default'])({}, _this.state, nextState);
(0, _forEach2['default'])((0, _keys2['default'])(nextState), function (stateName) {
(0, _forEach2['default'])((0, _get2['default'])(_this.listeners, stateName), function (listener) {
listener();
});
});
};
this.getState = function (propsName, callBack) {
if (propsName) {
var props = (0, _get2['default'])(_this.state, propsName);
if (callBack && !(0, _has2['default'])(_this.state, propsName)) {
_this.setState((0, _defineProperty3['default'])({}, propsName, callBack()));
return _this.getState(propsName);
}
return props;
}
return _this.state;
};
this.trigger = function (eventName) {
(0, _forEach2['default'])((0, _get2['default'])(_this.listeners, eventName), function (listener) {
listener();
});
};
this.subscribe = function (eventName, listener) {
_this.listeners[eventName] = _this.listeners[eventName] || [];
_this.listeners[eventName].push(listener);
return function () {
var listeners = (0, _get2['default'])(_this.listeners, eventName);
var index = (0, _indexOf2['default'])(listeners, listener);
if ((0, _isArray2['default'])(listeners)) {
_this.listeners[eventName].splice(index, 1);
}
};
};
this.state = {};
this.listeners = {};
};
exports['default'] = Store;