UNPKG

mk-meta-engine

Version:

元数据化引擎,在mk-app-loader实现的应用隔离基础上,实现可以用json元数据描述界面模型,并提供了action、reducer的基础函数和monkeyKing组件.

136 lines (109 loc) 4.63 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var componentFactory = function () { function componentFactory() { (0, _classCallCheck3.default)(this, componentFactory); this.components = {}; this.appComponents = {}; } (0, _createClass3.default)(componentFactory, [{ key: 'registerComponent', value: function registerComponent(name, component, ingoreExists) { if (this.components[name]) { if (ingoreExists) { return; } else { throw '\u7EC4\u4EF6existed. name: ' + name; } } this.components[name] = component; } }, { key: 'registerAppComponent', value: function registerAppComponent(appName, componentName, component) { this.appComponents[appName] = this.appComponents[appName] || {}; this.appComponents[appName].components = this.appComponents[appName].components || {}; if (this.appComponents[appName].components[componentName]) throw '\u7EC4\u4EF6existed. app:' + appName + ', name: ' + componentName; this.appComponents[appName].components[componentName] = component; } }, { key: 'registerComponents', value: function registerComponents(components) { var _this = this; if (!components || components.length == 0) return; components.forEach(function (c) { return _this.registerComponent(c.name, c.component); }); } }, { key: 'getComponent', value: function getComponent(appName, name) { if (!name) throw 'component name can not null'; if (name.substring(0, 2) == '::') { if (name.substr(2)) return name.substr(2);else throw '\u6CA1\u6709\u7EC4\u4EF6. name: ::'; } var nameSegs = name.split('.'), firstSeg = nameSegs[0]; if (this.appComponents && this.appComponents[appName] && this.appComponents[appName].components && this.appComponents[appName].components[firstSeg]) { var com = this.appComponents[appName].components[name]; if (com && nameSegs.length > 1) { com = this.findChild(com, nameSegs); } if (com) return com; } var component = this.components[firstSeg]; if (component && nameSegs.length > 1) { component = this.findChild(component, nameSegs); } if (!component) { debugger; throw '\u6CA1\u6709\u7EC4\u4EF6. name: ' + name; } return component; } }, { key: 'findChild', value: function findChild(component, nameSegs) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)(nameSegs.slice(1)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var s = _step.value; if (!component[s]) { component = undefined; return; } component = component[s]; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return component; } }]); return componentFactory; }(); var instance = new componentFactory(); exports.default = instance; module.exports = exports['default'];