ExtJs 3 портал с iframe - PullRequest
       7

ExtJs 3 портал с iframe

1 голос
/ 11 января 2012

На моей странице есть компонент портала / портлета ExtJs, содержимое которого является iframe.Когда портлет перемещается между позициями портала (переупорядочивается), некоторые браузеры перезагружают iframe (FF, Safari), а некоторые - нет (IE).Есть ли способ предотвратить перезагрузку во всех браузерах?

new Ext.ux.Portlet( {
title : 'test',
id : 'test',
itemId : 'testId',
html : '<iframe src=testPage.html></iframe>' // testPage.html is reloaded when drop finishes
});

В Portal.js (v.3.3.0) есть эта строка кода, которая, как я предполагаю, вызывает перезагрузку iframe:

 panel.el.dom.parentNode.removeChild(dd.panel.el.dom);

Ответы [ 2 ]

1 голос
/ 12 января 2012

Похоже, изменение родителя iframe вызывает перезагрузку. Поэтому моя идея заключается в том, чтобы прикрепить iframe к другому родительскому элементу и расположить его над портлетом. Ниже приведен пример кода портлета.

{
    title: 'Another Panel 2',
    tools: tools,
    html: '<div class="frame-bind" style="min-height: 200px;">&nbsp;</div>',
    listeners: {
        afterrender: function(sender) {
            this.portal = this.findParentByType('portal');

            var container = this.portal.body;
            var html = '<iframe src="http://www.onet.pl" style="position: absolute; border: none;"></iframe>';
            this.iframe = Ext.DomHelper.append(container, html, true);

            this.portal.on('beforedragover', this.beforedragoverHandler, this);
            this.portal.on('drop', this.dropHandler, this);
        },
        destroy: function() {
            if (this.iframe !== undefined) {
                this.iframe.remove();
            }
            this.portal.un('beforedragover', this.beforedragoverHandler, this);
            this.portal.un('drop', this.dropHandler, this);
            delete this.portal;
        },
        afterlayout: function(sender, layout) {
            this.positionIframe.defer(1, this);
        }
    },
    beforedragoverHandler: function(sender) {
        if (this !== sender) { return; }
        this.iframe.setStyle('visibility', 'hidden');
    },
    dropHandler: function(sender) {
        if (this !== sender) { return; }
        this.positionIframe();
        this.iframe.setStyle('visibility', 'visible');
    },                  
    positionIframe: function() {
        this.iframe.setLocation(this.body.getLeft(), this.body.getTop());
        this.iframe.setWidth(this.body.getWidth());
        this.iframe.setHeight(this.body.getHeight());
    }
}
0 голосов
/ 07 марта 2013

Вы используете макет границы? У меня была похожая проблема в Ext 4, но я смог ее решить:

Ext.override(Ext.layout.container.Border, {
isValidParent: function() {
    return true;
}
});
...