Javascript 使用knockoutjs虚拟元素动态创建html部件
我正在尝试使用带有html绑定的“virtual element”动态创建html部件,但失败的消息是:“绑定'html'不能用于虚拟元素”。以下是JSFIDLE:Javascript 使用knockoutjs虚拟元素动态创建html部件,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我正在尝试使用带有html绑定的“virtual element”动态创建html部件,但失败的消息是:“绑定'html'不能用于虚拟元素”。以下是JSFIDLE: 有人知道是否有解决方法吗?您也可以将此作为您的视图: <div data-bind="html: html"></div> 这将用您提供的html属性替换div“container”的innerHtml。好吧,在玩了一些
有人知道是否有解决方法吗?您也可以将此作为您的视图:
<div data-bind="html: html"></div>
这将用您提供的html属性替换div“container”的innerHtml。好吧,在玩了一些knockout之后,我发现这是可能的 工作示例如下 不幸的是,这需要复制一些内部淘汰功能 更新 KnockoutJS 2.2.1添加了绑定到导出的虚拟元素,因此即使在小型版本中也可以使用:
ko.exportSymbol('virtualElements.allowedBindings', ko.virtualElements.allowedBindings);
这意味着更好的html绑定解决方案是可能的-请参阅。基于Artem的代码和KnockoutJS 2.2.1,这里有一个改进版本:
ko.exportSymbol('virtualElements.allowedBindings', ko.virtualElements.allowedBindings);
改进:
{
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;
{
var overrided=ko.bindingHandlers['html'].update;
ko.bindingHandlers['html'].update=函数(元素,valueAccessor){
if(element.nodeType==8){
var html=ko.utils.unwrapobbservable(valueAccessor());
空节点(元素);
if((html!==null)&&(html!==undefined)){
如果(html的类型!=='string'){
html=html.toString();
}
var parsedNodes=ko.utils.parseHtmlFragment(html);
if(解析的节点){
var endCommentNode=element.nextSibling;
for(var i=0,j=parsedNodes.length;i
我知道如何对现有元素使用html绑定。我的问题是我想动态地创建元素本身。i、 e.我不想为div或其他任何东西绑定内部html内容,我希望html内容到位。你是说你想使用模板html替换DOM中的节点,并且当前的与模板绑定将不起作用,因为它们只替换其子节点,而不替换自身?酷,这正是我想要的。我只是想看看html和vhtml绑定是否可以递归地应用ko绑定,但我发现它不能:仅供参考,KnockoutJS2.2.1允许消除大部分重复。检查我的代码+演示的答案。这解决了我试图在淘汰模板中显示HTML字段的问题。谢谢