这里有一个稍微不同的(更基本的)解决方案的基础上。它允许你有一个完整的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