這裏有一個稍微不同的(更基本的)解決方案的基礎上。它允許你有一個完整的html結構的可觀察值,並用這些數據填充iFrame。如果您更新HTML,iframe的新版本更新:
ko.bindingHandlers.iframeContent = {
update: function(element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
element.contentWindow.document.close(); // Clear the content
element.contentWindow.document.write(value);
}
};
ko.applyBindings({
myHtml: ko.observable("<html>\n<head><title>Test</title></head>\n<body>\n\nMy <em>fine</em> text.\n\n</body>\n</html>")
});
您可以在視圖中使用這樣的:
<p>Edit your html:</p>
<textarea data-bind="value: myHtml, valueUpdate: 'afterkeydown'"></textarea>
<p>And see it appear in an iframe:</p>
<iframe data-bind="iframeContent: myHtml"></iframe>
的演示中看到this jsfiddle。 valueUpdate
只是在那裏,所以演示更清晰,如果在更大的場景中這是一個好主意,這是值得商榷的。
'initChildFrame'沒有被定義爲敲除的一部分。 – 2013-04-19 01:14:07
它位於try catch塊中。 initChildFrame不是一個淘汰賽的方法。這是一個支持它的瀏覽器方法。最簡單的方法來檢查我正在處理哪個瀏覽器,以便我的bindingHandler可以工作相同。那就是爲什麼第二次檢查是否定義了iframeInit。 – 2013-04-19 02:23:01
嘿,謝謝澄清 – 2013-04-19 03:34:47