我试图将“虚拟元素”与 html 绑定一起使用来动态创建 html 部分,但失败并显示消息:“绑定‘html’不能与虚拟元素一起使用”。这是jsfiddle:http://jsfiddle.net/d3Dpp/ http://jsfiddle.net/d3Dpp/.
有人知道是否有任何解决方法?
基于Artem的代码和KnockoutJS 2.2.1,这是一个改进版本:
http://jsfiddle.net/YZzDe/2/ http://jsfiddle.net/YZzDe/2/
改进:
- 更少的代码,更少的重复(连接到公开的接口)
- 覆盖“html”绑定,因此基本上旧的“html”现在可以在虚拟中使用
- 不再有全局函数。
这是代码
{
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)