2012-01-11 28 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; 
} 
});