我试图使用"虚拟元素"结合html绑定来动态创建html部分,但是出现了以下错误信息:"The binding 'html' cannot be used with virtual elements"。这是jsfiddle链接:http://jsfiddle.net/d3Dpp/。
有人知道是否有任何解决方法吗?
我试图使用"虚拟元素"结合html绑定来动态创建html部分,但是出现了以下错误信息:"The binding 'html' cannot be used with virtual elements"。这是jsfiddle链接:http://jsfiddle.net/d3Dpp/。
有人知道是否有任何解决方法吗?
{
var overridden = ko.bindingHandlers['html'].update;
ko.bindingHandlers['html'].update = function (element, valueAccessor) {
if (element.nodeType === 8) {
var html = ko.utils.unwrapObservable(valueAccessor());
ko.virtualElements.emptyNode(element);
if ((html !== null) && (html !== undefined)) {
if (typeof html !== 'string') {
html = html.toString();
}
var parsedNodes = ko.utils.parseHtmlFragment(html);
if (parsedNodes) {
var endCommentNode = element.nextSibling;
for (var i = 0, j = parsedNodes.length; i < j; i++)
endCommentNode.parentNode.insertBefore(parsedNodes[i], endCommentNode);
}
}
} else { // plain node
overridden(element, valueAccessor);
}
};
}
ko.virtualElements.allowedBindings['html'] = true;
经过一些使用knockout的尝试,我发现这是可能的。
这里有一个工作示例
不幸的是,这需要复制一些内部的knockout功能。
KnockoutJS 2.2.1增加了虚拟元素绑定到导出中,因此即使在精简版本中也可以使用:
ko.exportSymbol('virtualElements.allowedBindings', ko.virtualElements.allowedBindings);
你也可以将此作为你的视图:
<div data-bind="html: html"></div>
这将用您提供的HTML属性替换div“container”的innerHtml。
with
和template
绑定不起作用,因为它们只会替换它们的子元素而不是自身? - ericb