UNPKG

@morjs/runtime-web

Version:
61 lines 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // eslint-disable-next-line node/no-missing-import const component_1 = require("../public/component"); const HashChars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678oOLl9gqVvUuI1'; // 对模板名称进行编码 // NOTE: 这里的代码必须跟runtime中的代码是一致的 function hashTemplateName(name) { return name .split('') .map((c) => (HashChars.indexOf(c) >= 0 ? c : '$')) .join(''); } class TemplateManager { constructor() { this.templates = {}; } // add(tempRender) { // if (this.templates[tempRender.name]) { // console.warn('存在相同名称的模板') // } // this.templates[tempRender.name] = tempRender.render; // } addAll(obj) { Object.keys(obj).forEach((key) => { if (key.startsWith('template')) { this.templates[key] = obj[key]; } }); } renderTemplate(name, data, superComponent) { if (!name) { throw new Error('name 不能为空'); } if (typeof name !== 'string') { throw new Error('name 必须是字符串'); } if (data && typeof data !== 'object') { throw new Error('data 必须是对象. template name=' + name); } const t = this.templates[`template${hashTemplateName(name)}`]; if (t) { const d = data || {}; // 合并父级组件。以便后续递归传递数据 if (!d['$reactComp'] && superComponent && superComponent instanceof component_1.KBComponent) { d['$reactComp'] = superComponent; d['$root'] = superComponent.componentConfig; d['$id'] = superComponent.$id; } return t.call(d['$root'], d); } else { console.warn('模板不存在:' + name); } return null; } } exports.default = TemplateManager; //# sourceMappingURL=template.js.map