2014-01-16 143 views
3

有沒有什麼方法可以從knockout中的html字符串渲染?Knockout呈現html字符串

var html = ko.renderFromString('<p data-bind="text:name"></p>', {name:"Fred"}); 

這將是我在做什麼很方便。

$(".container").append(html); 
$(".container").on("click", "p", function(e){ 
console.log(ko.dataFor(this));}); 
+0

你見過這篇文章嗎? http://www.knockmeout.net/2011/10/ko-13-preview-part-3-template-sources.html它不完全描述你想要什麼,但你可以從中得到一些想法。 – nemesv

+0

基本上你想要的是模板。你也可以使用html綁定,但是在這種情況下viewmodel已經被綁定了。 –

回答

7

如果你在用模板引擎搞亂不願意,試試這個:

ko.renderFromString = function (html, data) 
    { 
    var node = new DOMParser().parseFromString(html, "text/html"); 
    this.applyBindings(data, node.body); 
    var res = node.body.innerHTML.toString(); 
    this.cleanNode(node); 
    delete node; 
    return res; 
    }; 

它基本上從你的HTML字符串創建一個臨時的(在-memeory)DOM元素,結合您的數據,返回綁定元素的innerHTML然後丟棄它。

+0

正是我想要完成的。 – Chin

+0

我不知道這是如何高性能。我會測試它並回來; – Chin

+0

不錯在7270ms 10000我爲一個簡單的string.replace函數使用了3869ms - 但是這對我來說開啓了很多 - 謝謝。 – Chin