2012-01-11 87 views
1

我的页面上有一个ExtJs门户/ portlet组件,其内容是一个iframe。当Portlet在门户位置之间拖动(重新安排)时,某些浏览器会重新加载iframe(FF,Safari),有些则不会(IE)。有没有办法阻止在所有浏览器上重新加载?带iframe的ExtJs 3门户​​

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); 

回答

1

它看起来像,改变iframe的父导致重新加载。所以我的想法是将iframe附加到其他父项,并将其定位在portlet上。以下是示例portlet代码。

{ 
    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

这是一种工作,除了一些位置计算问题,我无法解决。 positionIFrame()将为新坐标返回0。 afterLayout()在最后一次完成放置时调用它,我假设获得最准确的坐标,但不安静地获得正确的坐标。门户网站大量脱离了债券。当我调整我的浏览器的大小(只是推动它),重新计算框架大小发生,并将所有的门户再次进入他们的适当位置。任何想法,从我的描述可能是什么? – Elijah 2012-01-24 16:45:03

0

您是否正在运行边界布局?我有一个类似的问题在分机4,但我能够解决通过:

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