Browse Source

生命周期mount,先把子dom节点创建完再整个一起append到父节点上去

master
guy 4 years ago
parent
commit
fb32c9ef14
  1. 23
      dev.html
  2. 20
      src/core/widget.js

23
dev.html

@ -70,24 +70,26 @@
var store = BI.useStore(function () {
return BI.Models.getModel("demo.model");
});
setInterval(function () {
store.toggle();
}, 1000);
// setInterval(function () {
// store.toggle();
// }, 1000);
return function () {
return {
type: "bi.vertical",
vgap: 20,
items: [{
type: "demo.child"
}, {
type: "demo.child"
}]
items: BI.makeArray(10000).map(function (i) {
return {
type: "bi.label",
text: i
};
})
};
};
}
});
BI.shortcut("demo.parent", Widget);
BI.createWidget({
var time = performance.now();
var widget = BI.createWidget({
type: "bi.absolute",
items: [{
el: {
@ -97,7 +99,10 @@
left: 100
}],
element: "#wrapper"
// root: true
});
// widget.element.appendTo("#wrapper");
console.log(performance.now() - time);
</script>
</body>
</html>

20
src/core/widget.js

@ -227,22 +227,36 @@
* @private
*/
_mount: function (force, deep, lifeHook, predicate) {
if (this.__beforeMount(force, deep, lifeHook, predicate)) {
this.__afterMount(lifeHook, predicate);
return true;
}
return false;
},
__beforeMount: function (force, deep, lifeHook, predicate) {
var self = this;
if (!force && (this._isMounted || !this.isVisible() || this.__asking === true || !(this._isRoot === true || (this._parent && this._parent._isMounted === true)))) {
return false;
}
lifeHook !== false && callLifeHook(this, "beforeMount");
this._isMounted = true;
this._mountChildren && this._mountChildren();
BI.each(this._children, function (i, widget) {
!self.isEnabled() && widget._setEnable(false);
!self.isValid() && widget._setValid(false);
widget._mount && widget._mount(deep ? force : false, deep, lifeHook, predicate);
widget.__beforeMount && widget.__beforeMount(deep ? force : false, deep, lifeHook, predicate);
});
this._mountChildren && this._mountChildren();
return true;
},
__afterMount: function (lifeHook, predicate) {
BI.each(this._children, function (i, widget) {
widget.__afterMount && widget.__afterMount(lifeHook, predicate);
});
lifeHook !== false && callLifeHook(this, "mounted");
this.fireEvent(BI.Events.MOUNT);
predicate && predicate(this);
return true;
},
_mountChildren: null,

Loading…
Cancel
Save