如何使用KnockoutJS数据绑定iframe的内容?
任何人都可以告诉我如何使用Knockout将数据绑定到iframe
? 我试过这样做,如下所示,但它没有按预期工作:
和Javascript:
var ViewModel = function (content) { this.testcontent = ko.observable(content); }; ko.applyBindings(new ViewModel("Hello World!!"));
我想在iframe
添加“Hello Content”文本。 有人可以帮我吗?
这是一个稍微不同(更基本)的解决方案。 它允许您拥有一个具有整个html结构的observable,并使用该数据填充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("\nTest \n\n\nMy fine text.\n\n\n") });
你可以在你的视图中使用这个:
Edit your html:
And see it appear in an iframe:
请参阅此jsfiddle以获取演示。 valueUpdate
只是在那里,所以演示更清晰,如果在更大的场景中这是一个好主意,这是有争议的。
编辑:小提琴更新。
http://jsfiddle.net/sujesharukil/NnT78/10/
您需要为此创建自定义绑定处理程序。 我使用过http://jsfiddle.net/mbest/GYRUX/
并根据您的需要进行了更改。 看看两者,看看哪些适合您的需求。
ko.bindingHandlers.bindIframe = { init: function(element, valueAccessor) { function bindIframe() { try { var iframeInit = element.contentWindow.initChildFrame, iframedoc = element.contentDocument.body; } catch(e) { // ignored } if (iframeInit) iframeInit(ko, valueAccessor()); else if (iframedoc){ var span = document.createElement('span'); span.setAttribute('data-bind', 'text: someProperty'); iframedoc.appendChild(span); ko.applyBindings(valueAccessor(), iframedoc); } }; bindIframe(); ko.utils.registerEventHandler(element, 'load', bindIframe); } };
你可以拥有这样的代码,工作得很好: –
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI function AppViewModel() { this.externalUrl = ko.observable("http://www.w3schools.com"); } // Activates knockout.js ko.applyBindings(new AppViewModel());
要么
Test IFrame