From 1835928fde2450d570aac587695b6255422ccddb Mon Sep 17 00:00:00 2001 From: guy Date: Fri, 2 Apr 2021 15:18:25 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F=E4=B8=A5?= =?UTF-8?q?=E6=A0=BC=E6=8C=89=E7=85=A7beforemount=20render=20mounted?= =?UTF-8?q?=E7=9A=84=E9=A1=BA=E5=BA=8F=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/fix/fix.compact.ie.js | 140 ++++++++++++++++++------------------- dist/fix/fix.compact.js | 140 ++++++++++++++++++------------------- src/core/4.widget.js | 27 +++---- 3 files changed, 155 insertions(+), 152 deletions(-) diff --git a/dist/fix/fix.compact.ie.js b/dist/fix/fix.compact.ie.js index 4598b7c58..bdc8af155 100644 --- a/dist/fix/fix.compact.ie.js +++ b/dist/fix/fix.compact.ie.js @@ -163,76 +163,76 @@ needPop && popTarget(); }; - BI.Widget.prototype._initElement = function () { - var self = this; - var render = BI.isFunction(this.options.render) ? this.options.render : this.render; - var els; - if (this.options.updateMode === "auto" && this._store) { - // 自动更新模式 - var childComponents = {}; - var rendered = false; - this._watchers.push(Fix.watch(this.model, function () { - if (rendered) { - var newEls = render && render.call(this); - BI.each(childComponents, function (i, childComponent) { - if (childComponent.component instanceof BI.Layout) { - return; // 布局的过滤掉 - } - var nextProps = BI.get([newEls], childComponent.path); - if (nextProps) { - var shouldUpdate = childComponent.component.shouldUpdate && childComponent.component.shouldUpdate(nextProps); - childComponent.component._update(nextProps, shouldUpdate); - childComponent.props = BI.extend(childComponent.props, nextProps); - } - }); - } else { - els = render && render.call(this); - - function traverse (parent, path) { - BI.each(parent, function (i, child) { - var childPath = path.concat(i); - if (BI.isArray(child)) { - traverse(child, childPath); - } else if (BI.isPlainObject(child)) { - if (child.type) { - child.__ref = function (_ref) { - if (_ref) { - var comp = childComponents[this.getName()] = {}; - comp.component = _ref; - comp.props = child; - comp.path = childPath; - } else { - delete childComponents[this.getName()]; - } - }; - } - traverse(child, childPath); - } - }); - } - - traverse([els], []); - rendered = true; - } - })); - } else { - els = render && render.call(this); - } - if (BI.isPlainObject(els)) { - els = [els]; - } - if (BI.isArray(els)) { - BI.each(els, function (i, el) { - if (el) { - BI._lazyCreateWidget(el, { - element: self - }); - } - }); - } - // if (this._isRoot === true || !(this instanceof BI.Layout)) { - this._mount(); - }; + // BI.Widget.prototype._initElement = function () { + // var self = this; + // var render = BI.isFunction(this.options.render) ? this.options.render : this.render; + // var els; + // if (this.options.updateMode === "auto" && this._store) { + // // 自动更新模式 + // var childComponents = {}; + // var rendered = false; + // this._watchers.push(Fix.watch(this.model, function () { + // if (rendered) { + // var newEls = render && render.call(this); + // BI.each(childComponents, function (i, childComponent) { + // if (childComponent.component instanceof BI.Layout) { + // return; // 布局的过滤掉 + // } + // var nextProps = BI.get([newEls], childComponent.path); + // if (nextProps) { + // var shouldUpdate = childComponent.component.shouldUpdate && childComponent.component.shouldUpdate(nextProps); + // childComponent.component._update(nextProps, shouldUpdate); + // childComponent.props = BI.extend(childComponent.props, nextProps); + // } + // }); + // } else { + // els = render && render.call(this); + // + // function traverse (parent, path) { + // BI.each(parent, function (i, child) { + // var childPath = path.concat(i); + // if (BI.isArray(child)) { + // traverse(child, childPath); + // } else if (BI.isPlainObject(child)) { + // if (child.type) { + // child.__ref = function (_ref) { + // if (_ref) { + // var comp = childComponents[this.getName()] = {}; + // comp.component = _ref; + // comp.props = child; + // comp.path = childPath; + // } else { + // delete childComponents[this.getName()]; + // } + // }; + // } + // traverse(child, childPath); + // } + // }); + // } + // + // traverse([els], []); + // rendered = true; + // } + // })); + // } else { + // els = render && render.call(this); + // } + // if (BI.isPlainObject(els)) { + // els = [els]; + // } + // if (BI.isArray(els)) { + // BI.each(els, function (i, el) { + // if (el) { + // BI._lazyCreateWidget(el, { + // element: self + // }); + // } + // }); + // } + // // if (this._isRoot === true || !(this instanceof BI.Layout)) { + // this._mount(); + // }; var unMount = BI.Widget.prototype.__d; BI.Widget.prototype.__d = function () { diff --git a/dist/fix/fix.compact.js b/dist/fix/fix.compact.js index 658776857..bb894d6f9 100644 --- a/dist/fix/fix.compact.js +++ b/dist/fix/fix.compact.js @@ -163,76 +163,76 @@ needPop && popTarget(); }; - BI.Widget.prototype._initElement = function () { - var self = this; - var render = BI.isFunction(this.options.render) ? this.options.render : this.render; - var els; - if (this.options.updateMode === "auto" && this._store) { - // 自动更新模式 - var childComponents = {}; - var rendered = false; - this._watchers.push(Fix.watch(this.model, function () { - if (rendered) { - var newEls = render && render.call(this); - BI.each(childComponents, function (i, childComponent) { - if (childComponent.component instanceof BI.Layout) { - return; // 布局的过滤掉 - } - var nextProps = BI.get([newEls], childComponent.path); - if (nextProps) { - var shouldUpdate = childComponent.component.shouldUpdate && childComponent.component.shouldUpdate(nextProps); - childComponent.component._update(nextProps, shouldUpdate); - childComponent.props = BI.extend(childComponent.props, nextProps); - } - }); - } else { - els = render && render.call(this); - - function traverse (parent, path) { - BI.each(parent, function (i, child) { - var childPath = path.concat(i); - if (BI.isArray(child)) { - traverse(child, childPath); - } else if (BI.isPlainObject(child)) { - if (child.type) { - child.__ref = function (_ref) { - if (_ref) { - var comp = childComponents[this.getName()] = {}; - comp.component = _ref; - comp.props = child; - comp.path = childPath; - } else { - delete childComponents[this.getName()]; - } - }; - } - traverse(child, childPath); - } - }); - } - - traverse([els], []); - rendered = true; - } - })); - } else { - els = render && render.call(this); - } - if (BI.isPlainObject(els)) { - els = [els]; - } - if (BI.isArray(els)) { - BI.each(els, function (i, el) { - if (el) { - BI._lazyCreateWidget(el, { - element: self - }); - } - }); - } - // if (this._isRoot === true || !(this instanceof BI.Layout)) { - this._mount(); - }; + // BI.Widget.prototype._initElement = function () { + // var self = this; + // var render = BI.isFunction(this.options.render) ? this.options.render : this.render; + // var els; + // if (this.options.updateMode === "auto" && this._store) { + // // 自动更新模式 + // var childComponents = {}; + // var rendered = false; + // this._watchers.push(Fix.watch(this.model, function () { + // if (rendered) { + // var newEls = render && render.call(this); + // BI.each(childComponents, function (i, childComponent) { + // if (childComponent.component instanceof BI.Layout) { + // return; // 布局的过滤掉 + // } + // var nextProps = BI.get([newEls], childComponent.path); + // if (nextProps) { + // var shouldUpdate = childComponent.component.shouldUpdate && childComponent.component.shouldUpdate(nextProps); + // childComponent.component._update(nextProps, shouldUpdate); + // childComponent.props = BI.extend(childComponent.props, nextProps); + // } + // }); + // } else { + // els = render && render.call(this); + // + // function traverse (parent, path) { + // BI.each(parent, function (i, child) { + // var childPath = path.concat(i); + // if (BI.isArray(child)) { + // traverse(child, childPath); + // } else if (BI.isPlainObject(child)) { + // if (child.type) { + // child.__ref = function (_ref) { + // if (_ref) { + // var comp = childComponents[this.getName()] = {}; + // comp.component = _ref; + // comp.props = child; + // comp.path = childPath; + // } else { + // delete childComponents[this.getName()]; + // } + // }; + // } + // traverse(child, childPath); + // } + // }); + // } + // + // traverse([els], []); + // rendered = true; + // } + // })); + // } else { + // els = render && render.call(this); + // } + // if (BI.isPlainObject(els)) { + // els = [els]; + // } + // if (BI.isArray(els)) { + // BI.each(els, function (i, el) { + // if (el) { + // BI._lazyCreateWidget(el, { + // element: self + // }); + // } + // }); + // } + // // if (this._isRoot === true || !(this instanceof BI.Layout)) { + // this._mount(); + // }; var unMount = BI.Widget.prototype.__d; BI.Widget.prototype.__d = function () { diff --git a/src/core/4.widget.js b/src/core/4.widget.js index b1d1fe258..e85eefe80 100644 --- a/src/core/4.widget.js +++ b/src/core/4.widget.js @@ -7,7 +7,7 @@ */ !(function () { - function callLifeHook(self, life) { + function callLifeHook (self, life) { var hook = self.options[life] || self[life]; if (hook) { var hooks = BI.isArray(hook) ? hook : [hook]; @@ -98,8 +98,9 @@ _initRender: function () { var self = this; - function render() { + function render () { if (self.options.beforeRender || self.beforeRender) { + this.__async = true; (self.options.beforeRender || self.beforeRender).call(self, BI.bind(self._render, self)); } else { self._render(); @@ -109,9 +110,6 @@ if (this.options.beforeInit || this.beforeInit) { this.__asking = true; (this.options.beforeInit || this.beforeInit).call(this, render); - if (this.__asking === true) { - this.__async = true; - } } else { render(); } @@ -123,6 +121,7 @@ this._initElement(); this._initEffects(); callLifeHook(this, "created"); + this.__async = false; }, _initCurrent: function () { @@ -204,6 +203,8 @@ _initElement: function () { var self = this; + var isMounted = this._isMounted; + this.__async === true && isMounted && callLifeHook(this, "beforeMount"); var render = BI.isFunction(this.options.render) ? this.options.render : this.render; var els = render && render.call(this); if (BI.isPlainObject(els)) { @@ -218,9 +219,9 @@ } }); } - // if (this._isRoot === true || !(this instanceof BI.Layout)) { this._mount(); - // } + + this.__async === true && isMounted && callLifeHook(this, "mounted"); }, _setParent: function (parent) { @@ -242,7 +243,7 @@ return false; } layer = layer || 0; - lifeHook !== false && callLifeHook(this, "beforeMount"); + lifeHook !== false && !this.__async && callLifeHook(this, "beforeMount"); this._isMounted = true; for (var key in this._children) { var child = this._children[key]; @@ -266,8 +267,10 @@ var child = this._children[key]; child.__afterMount && child.__afterMount(lifeHook, predicate); } - lifeHook !== false && callLifeHook(this, "mounted"); - this.fireEvent(BI.Events.MOUNT); + if (lifeHook !== false && !this.__async) { + callLifeHook(this, "mounted"); + this.fireEvent(BI.Events.MOUNT); + } predicate && predicate(this); } }, @@ -593,12 +596,12 @@ BI.Widget.context = context = contextStack.pop(); }; - function pushTarget(_current) { + function pushTarget (_current) { if (current) currentStack.push(current); BI.Widget.current = current = _current; } - function popTarget() { + function popTarget () { BI.Widget.current = current = currentStack.pop(); }