guy 3 years ago
parent
commit
6d4a95d18a
  1. 20
      src/core/4.widget.js
  2. 29
      src/core/element2Snabbdom.js

20
src/core/4.widget.js

@ -170,7 +170,9 @@
this.element = BI.Widget._renderEngine.createElement(this); this.element = BI.Widget._renderEngine.createElement(this);
} }
this.element._isWidget = true; this.element._isWidget = true;
(this.element[0]._Widgets = this.element[0]._Widgets || []).push(this); var widgets = this.element.data("_Widgets") || [];
widgets.push(this);
this.element.data("_Widgets", widgets);
this._initCurrent(); this._initCurrent();
}, },
@ -223,11 +225,19 @@
} }
if (BI.isArray(els)) { if (BI.isArray(els)) {
if (this.options.vdom) { if (this.options.vdom) {
this.vnode = this._renderVNode();
var div = document.createElement("div"); var div = document.createElement("div");
this.element.append(div); var element = this.element;
element.append(div);
this.vnode = this._renderVNode();
BI.patchVNode(div, this.vnode); BI.patchVNode(div, this.vnode);
// this.element = $(div); // 去除这个临时的div
BI.DOM.hang([div]);
element.attr("style", self.vnode.elm.getAttribute("style"));
element.addClass(self.vnode.elm.getAttribute("class"));
element.empty();
BI.each(BI.jQuery(self.vnode.elm).children(), function (i, node) {
element.append(node);
})
} else { } else {
BI.each(els, function (i, el) { BI.each(els, function (i, el) {
if (el) { if (el) {
@ -264,7 +274,7 @@
} }
}); });
} }
return BI.Element2Snabbdom(container); return BI.Element2Vnode(container);
}, },
_setParent: function (parent) { _setParent: function (parent) {

29
src/core/element2Snabbdom.js

@ -1,8 +1,8 @@
!function () { !function () {
var patch = BI.Snabbdom.init([BI.Snabbdom.attributesModule, BI.Snabbdom.classModule, BI.Snabbdom.datasetModule, BI.Snabbdom.propsModule, BI.Snabbdom.styleModule, BI.Snabbdom.eventListenersModule]); var patch = BI.Snabbdom.init([BI.Snabbdom.attributesModule, BI.Snabbdom.classModule, BI.Snabbdom.datasetModule, BI.Snabbdom.propsModule, BI.Snabbdom.styleModule, BI.Snabbdom.eventListenersModule]);
BI.Element2Snabbdom = function (parentNode) { BI.Element2Vnode = function (parentNode) {
if (parentNode.nodeType === 3) { if (parentNode.nodeType === 3) {
return parentNode.textContent; return BI.Snabbdom.vnode(undefined, undefined, undefined, parentNode.textContent, parentNode);
} }
var data = BI.jQuery._data(parentNode); var data = BI.jQuery._data(parentNode);
var on = {}; var on = {};
@ -14,26 +14,31 @@
}); });
}; };
}); });
var style = parentNode.getAttribute("style"); var attrs = {};
var elmAttrs = parentNode.attributes;
var elmChildren = parentNode.childNodes;
var key = parentNode.getAttribute("key"); var key = parentNode.getAttribute("key");
// var claz = parentNode.getAttribute("class"); for (i = 0, n = elmAttrs.length; i < n; i++) {
var vnode = BI.Snabbdom.h(parentNode.nodeName, { var name = elmAttrs[i].nodeName;
if (name !== "id" && name !== "class") {
attrs[name] = elmAttrs[i].nodeValue;
}
}
var vnode = BI.Snabbdom.vnode(parentNode.nodeName, {
class: BI.makeObject(parentNode.classList), class: BI.makeObject(parentNode.classList),
props: { attrs: attrs,
style: style
},
key: key, key: key,
on: on, on: on,
hook: { hook: {
create: function () { create: function () {
BI.each(parentNode._Widgets, function (i, w) { BI.each(BI.Widget._renderEngine.createElement(parentNode).data("_Widgets"), function (i, w) {
w.element = BI.Widget._renderEngine.createElement(vnode.elm); w.element = BI.Widget._renderEngine.createElement(vnode.elm);
}); });
} }
} }
}, BI.map(parentNode.childNodes, function (i, childNode) { }, BI.map(elmChildren, function (i, childNode) {
return BI.Element2Snabbdom(childNode); return BI.Element2Vnode(childNode);
})); }), undefined, parentNode);
return vnode; return vnode;
}; };

Loading…
Cancel
Save