2012-03-14 69 views
2

我想要使用html绑定动态地添加html内容,并在该html内容中我有其他ko绑定应用。然而,由于预期下面的代码不起作用:Knockoutjs:如何绑定到HTML绑定递归

<div data-bind="html: html"></div>​ 
<script type="text/javascript"> 
var vm = new function(){ 
    this.html = ko.observable("hello <span data-bind='text: text'></span>"); 
    this.text = "world"; 
}; 
ko.applyBindings(vm); 
</script> 

的jsfiddle可用:http://jsfiddle.net/jvVeQ/

感谢, 绿色

+3

检查这个http://jsfiddle.net/jvVeQ/1/,我不把这个答案,因为我不知道这个'递归'绑定不会导致内存泄漏。顺便说一下,你想达到什么目的? – Artem 2012-03-14 10:11:49

+0

我正在创建一个在线表单设计器。每个控件的设计时html都是使用html绑定动态注入的。在那部分我想继续使用ko来管理状态变化。顺便说一句,谢谢你的答案! – 2012-03-14 12:12:13

+0

也许你可以将控件作为html文件的模板,然后使用模板绑定来选择要呈现的模型(例如data-bind =“template:fieldType”) – guigouz 2012-03-15 02:19:36

回答

0

这可以通过基因敲除的模板来完成。

看一看this fiddle

你的情况,这将是这样的:

<div data-bind="template: 'myTemplate' "></div>​ 

<script id="myTemplate" type="text/html"> 
    <span data-bind='text: text'></span> 
</script> 
0

您可以使用以下自定义淘汰赛结合,这是一样的内置html不同之处在于controlsDescendantBindings绑定是false代替true

ko.bindingHandlers['htmlRecurse'] = { 
    'init': function() { 
     return { 'controlsDescendantBindings': false }; 
    }, 
    'update': function (element, valueAccessor) { 
     ko.utils.setHtml(element, valueAccessor()); 
    } 
}; 

小提琴:http://jsfiddle.net/jvVeQ/16/

小心:为避免跨站点脚本攻击,请不要从用户输入构建递归绑定。