2012-03-14 38 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/

小心:爲避免跨站點腳本攻擊,請不要從用戶輸入構建遞歸綁定。