Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 整个html文档的主干js视图_Javascript_Jquery_Html_Iframe_Backbone.js - Fatal编程技术网

Javascript 整个html文档的主干js视图

Javascript 整个html文档的主干js视图,javascript,jquery,html,iframe,backbone.js,Javascript,Jquery,Html,Iframe,Backbone.js,我想在iframe中为html文档创建一个视图。例如: <div id="some"> <iframe id="other" /> </div> 然后,当我这样做时: var iframe = $('#other')[0].contentWindow.document; iframeDocument.open(); iframeDocument.write(projectView.render().el); iframeDocument.close(

我想在iframe中为html文档创建一个视图。例如:

<div id="some">
    <iframe id="other" />
</div>
然后,当我这样做时:

var iframe = $('#other')[0].contentWindow.document;
iframeDocument.open();
iframeDocument.write(projectView.render().el);
iframeDocument.close();

它不起作用。我尝试了很多不同的组合,但没有成功。如果我将document.write()与静态html结合使用,效果会很好,但如何处理主干视图和动态内容?

我认为您的方法过于复杂,使用主干并没有给您带来任何好处。你为什么不用模型的
content
URL设置
iframe
s
src
属性,然后使用它呢

render: function()
{
    this.$el.attr('src', this.model.url()); //Or whatever you need to get the right URL
    return this;
}
“el”属性是对HTML对象的引用。您正在将其传递到document.write()调用中,而该函数实际上需要一个HTML字符串。这就是为什么静态HTML适用于您

所以你可能想做这样的事情:

var projectView = Backbone.View.extend(
{
    tagName: 'html',


    initialize: function()
    {
        this.model.bind('sync', this.render, this);
    },


    render: function()
    {
        this.$el.html(this.model.get('content')); // content is from model, and it     
        //receives the html document from server
        return this;
    }
});
iframeDocument.open();
iframeDocument.write(projectView.render().el.innerHTML);
iframeDocument.close();

没有理由使用iframe

您只需将iframe替换为div,它将在每次触发同步事件时呈现

您还可以对事件使用
on
而不是
bind

var projectView = Backbone.View.extend(
{
    tagName: 'div',


    initialize: function()
    {
        this.model.on('sync', this.render, this);
    },


    render: function()
    {
        this.$el.html(this.model.get('content')); // content is from model, and it     
        //receives the html document from server
        return this;
    }
});
然后将视图放入一个容器中

$('#some').html(projectView.el);

在调用
write
之前,您可能需要从模型中删除一些不必要的内容(即
标记),只要它同步projectView.render().el的值是多少?它是一个JavaScript对象:[Object htmliframelement]。如果我把内容放在div中,它就是完全正常的html文档。但对iframe不起作用。在浏览器控制台中,它似乎是html文档。。。我尝试使用这种方法是因为iframe的内容在数据库中。整个html文档位于数据库中。在我获取内容之后,我会动态地更改它,然后我想再次保存它。你可能是对的,这可能不是最好的方法。我仍在试图弄清楚是应该过滤文档(删除一些标记)并将其嵌入到div中,还是将其完全加载到iframe中。src方法对我不起作用,毕竟,我会动态地更改文档的内容。是的,但是为什么不在iframe文档中这样做呢?这样也可以避免恼人的跨来源限制。您的意思是框架文档本身会改变吗?六羟甲基三聚氰胺六甲醚。。。这是个好主意。另一方面,在触发基本文档上的事件时,必须应用更改。无论如何,我会考虑的。谢谢我会尝试你的建议,但我仍然不相信div方法足够干净。我可能错了,但我必须自己试一试。对不起,实际上它不起作用。我仍然无法从el获取html。