From cc5d5ff727e456b0b722aa339e4c5cf1b78f5f19 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 30 Aug 2021 12:05:35 +0800 Subject: [PATCH] =?UTF-8?q?config=E6=94=BEget=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/5.shortcut.js | 37 ++++---- src/core/6.inject.js | 203 ++++++++++++++++++++++++++++------------- 2 files changed, 158 insertions(+), 82 deletions(-) diff --git a/src/core/5.shortcut.js b/src/core/5.shortcut.js index b23ab983f..b209c16e5 100644 --- a/src/core/5.shortcut.js +++ b/src/core/5.shortcut.js @@ -35,9 +35,6 @@ }; BI.createWidget = BI.createWidget || function (item, options, context, lazy) { - // 先把准备环境准备好 - BI.init(); - var el, w; item || (item = {}); if (BI.isWidget(options)) { context = options; @@ -45,6 +42,21 @@ } else { options || (options = {}); } + + var el, w; + if (item.type || options.type) { + el = BI.extend({}, options, item); + } else if (item.el && (item.el.type || options.type)) { + el = BI.extend({}, options, item.el); + } + + if (el) { + BI.runConfigFunction(el.type); + } + + // 先把准备环境准备好 + BI.init(); + if (BI.isEmpty(item) && BI.isEmpty(options)) { return BI.createWidget({ type: "bi.layout" @@ -53,24 +65,7 @@ if (BI.isWidget(item)) { return item; } - if (item.type || options.type) { - el = BI.extend({}, options, item); - w = BI.Plugin.getWidget(el.type, el); - if (w.type === el.type) { - if (BI.Plugin.hasObject(el.type)) { - w.listeners = (w.listeners || []).concat([{ - eventName: BI.Events.MOUNT, - action: function () { - BI.Plugin.getObject(el.type, this); - } - }]); - } - return createWidget(w, context, lazy); - } - return BI.createWidget(w, options, context, lazy); - } - if (item.el && (item.el.type || options.type)) { - el = BI.extend({}, options, item.el); + if (el) { w = BI.Plugin.getWidget(el.type, el); if (w.type === el.type) { if (BI.Plugin.hasObject(el.type)) { diff --git a/src/core/6.inject.js b/src/core/6.inject.js index e3abaa51a..e2e8f1f8e 100644 --- a/src/core/6.inject.js +++ b/src/core/6.inject.js @@ -74,85 +74,163 @@ }; var configFunctions = {}; - BI.config = BI.config || function (type, configFn, opt) { - opt = opt || {}; - // 初始化过或者系统配置需要立刻执行 - if (BI.initialized || "bi.provider.system" === type) { + var runConfigFunction = BI.runConfigFunction = function (type) { + if (!type || !configFunctions[type]) { + return false; + } + var queue = configFunctions[type]; + delete configFunctions[type]; + + var dependencies = BI.Providers.getProvider("bi.provider.system").getDependencies(); + var modules = moduleInjectionMap.components[type] + || moduleInjectionMap.constants[type] + || moduleInjectionMap.services[type] + || moduleInjectionMap.stores[type] + || moduleInjectionMap.models[type] + || moduleInjectionMap.providers[type]; + for (var i = 0; i < queue.length; i++) { + var conf = queue[i]; + var version = conf.opt.version; + var fn = conf.fn; + if (modules && version) { + var findVersion = false; + for (var j = 0; j < modules.length; j++) { + var module = modules[i]; + if (module && dependencies[module.moduleId] && module.version === version) { + var minVersion = dependencies[module.moduleId].minVersion, + maxVersion = dependencies[module.moduleId].maxVersion; + if (minVersion && (moduleInjection[module.moduleId].version || version) < minVersion) { + findVersion = true; + break; + } + if (maxVersion && (moduleInjection[module.moduleId].version || version) > maxVersion) { + findVersion = true; + break; + } + } + } + if (findVersion === true) { + _global.console && console.error("moduleId: [" + module.moduleId + "] 接口: [" + type + "] 接口版本: [" + version + "] 已过期,版本要求为:", dependencies[module.moduleId], "=>", moduleInjection[module.moduleId]); + continue; + } + } if (constantInjection[type]) { - return (constantInjection[type] = configFn(constantInjection[type])); + constantInjection[type] = fn(constantInjection[type]); + continue; } if (providerInjection[type]) { if (!providers[type]) { providers[type] = new providerInjection[type](); } - // 如果config被重新配置的话,需要删除掉之前的实例 if (providerInstance[type]) { delete providerInstance[type]; } - return configFn(providers[type]); + fn(providers[type]); + continue; + } + BI.Plugin.configWidget(type, fn); + } + }; + BI.config = BI.config || function (type, configFn, opt) { + opt = opt || {}; + + // 系统配置直接执行 + if ("bi.provider.system" === type) { + if (!providers[type]) { + providers[type] = new providerInjection[type](); + } + // 如果config被重新配置的话,需要删除掉之前的实例 + if (providerInstance[type]) { + delete providerInstance[type]; } - return BI.Plugin.configWidget(type, configFn, opt); + return configFn(providers[type]); } + if (!configFunctions[type]) { configFunctions[type] = []; - BI.prepares.push(function () { - var queue = configFunctions[type]; - var dependencies = BI.Providers.getProvider("bi.provider.system").getDependencies(); - var modules = moduleInjectionMap.components[type] - || moduleInjectionMap.constants[type] - || moduleInjectionMap.services[type] - || moduleInjectionMap.stores[type] - || moduleInjectionMap.models[type] - || moduleInjectionMap.providers[type]; - for (var i = 0; i < queue.length; i++) { - var conf = queue[i]; - var version = conf.opt.version; - var fn = conf.fn; - if (modules && version) { - var findVersion = false; - for (var j = 0; j < modules.length; j++) { - var module = modules[i]; - if (module && dependencies[module.moduleId] && module.version === version) { - var minVersion = dependencies[module.moduleId].minVersion, - maxVersion = dependencies[module.moduleId].maxVersion; - if (minVersion && (moduleInjection[module.moduleId].version || version) < minVersion) { - findVersion = true; - break; - } - if (maxVersion && (moduleInjection[module.moduleId].version || version) > maxVersion) { - findVersion = true; - break; - } - } - } - if (findVersion === true) { - _global.console && console.error("moduleId: [" + module.moduleId + "] 接口: [" + type + "] 接口版本: [" + version + "] 已过期,版本要求为:", dependencies[module.moduleId], "=>", moduleInjection[module.moduleId]); - continue; - } - } - if (constantInjection[type]) { - constantInjection[type] = fn(constantInjection[type]); - continue; - } - if (providerInjection[type]) { - if (!providers[type]) { - providers[type] = new providerInjection[type](); - } - if (providerInstance[type]) { - delete providerInstance[type]; - } - fn(providers[type]); - continue; - } - BI.Plugin.configWidget(type, fn); - } - configFunctions[type] = null; - }); } configFunctions[type].push({ fn: configFn, opt: opt }); + + // // 初始化过或者系统配置需要立刻执行 + // if (BI.initialized || "bi.provider.system" === type) { + // if (constantInjection[type]) { + // return (constantInjection[type] = configFn(constantInjection[type])); + // } + // if (providerInjection[type]) { + // if (!providers[type]) { + // providers[type] = new providerInjection[type](); + // } + // // 如果config被重新配置的话,需要删除掉之前的实例 + // if (providerInstance[type]) { + // delete providerInstance[type]; + // } + // return configFn(providers[type]); + // } + // return BI.Plugin.configWidget(type, configFn, opt); + // } + // if (!configFunctions[type]) { + // configFunctions[type] = []; + // BI.prepares.push(function () { + // var queue = configFunctions[type]; + // var dependencies = BI.Providers.getProvider("bi.provider.system").getDependencies(); + // var modules = moduleInjectionMap.components[type] + // || moduleInjectionMap.constants[type] + // || moduleInjectionMap.services[type] + // || moduleInjectionMap.stores[type] + // || moduleInjectionMap.models[type] + // || moduleInjectionMap.providers[type]; + // for (var i = 0; i < queue.length; i++) { + // var conf = queue[i]; + // var version = conf.opt.version; + // var fn = conf.fn; + // if (modules && version) { + // var findVersion = false; + // for (var j = 0; j < modules.length; j++) { + // var module = modules[i]; + // if (module && dependencies[module.moduleId] && module.version === version) { + // var minVersion = dependencies[module.moduleId].minVersion, + // maxVersion = dependencies[module.moduleId].maxVersion; + // if (minVersion && (moduleInjection[module.moduleId].version || version) < minVersion) { + // findVersion = true; + // break; + // } + // if (maxVersion && (moduleInjection[module.moduleId].version || version) > maxVersion) { + // findVersion = true; + // break; + // } + // } + // } + // if (findVersion === true) { + // _global.console && console.error("moduleId: [" + module.moduleId + "] 接口: [" + type + "] 接口版本: [" + version + "] 已过期,版本要求为:", dependencies[module.moduleId], "=>", moduleInjection[module.moduleId]); + // continue; + // } + // } + // if (constantInjection[type]) { + // constantInjection[type] = fn(constantInjection[type]); + // continue; + // } + // if (providerInjection[type]) { + // if (!providers[type]) { + // providers[type] = new providerInjection[type](); + // } + // if (providerInstance[type]) { + // delete providerInstance[type]; + // } + // fn(providers[type]); + // continue; + // } + // BI.Plugin.configWidget(type, fn); + // } + // configFunctions[type] = null; + // }); + // } + // configFunctions[type].push({ + // fn: configFn, + // opt: opt + // }); }; BI.getReference = BI.getReference || function (type, fn) { @@ -215,6 +293,7 @@ if (BI.isNull(constantInjection[type])) { _global.console && console.error("constant: [" + type + "] 未定义"); } + runConfigFunction(type); return constantInjection[type]; } }; @@ -262,6 +341,7 @@ if (!modelInjection[type]) { _global.console && console.error("model: [" + type + "] 未定义"); } + runConfigFunction(type); var inst = new modelInjection[type](config); inst._constructor && inst._constructor(config); inst.mixins && callPoint(inst, inst.mixins); @@ -313,6 +393,7 @@ if (!providerInjection[type]) { _global.console && console.error("provider: [" + type + "] 未定义"); } + runConfigFunction(type); if (!providers[type]) { providers[type] = new providerInjection[type](); }