2012-01-11 20 views
1

私のページにはExtJsポータル/ポートレットコンポーネントがあります。そのコンテンツはiframeです。ポートレットがポータル位置の間でドラッグされると(再配置された)、一部のブラウザはiframe(FF、Safari)をリロードし、一部のブラウザはリロードしません(IE)。すべてのブラウザでリロードが起こらないようにする方法はありますか?ExtJs 3 portal with iframe

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を引き起こしている推測していたコードのこの行がある:それは、IFRAMEの親を変更する、のように見える

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

答えて

1

リロードを引き起こします。だから、私の考えは、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

これは私が解決できないいくつかの位置計算の問題を除いて機能しています。 positionIFrame()は、新しい座標に対して0を返します。 afterLayout()は前回のドロップ完了時にそれを呼び出しますが、最も正確な座標を取得すると仮定していますが、静かに座標を取得しません。ポータルは激しく債券から外れています。ブラウザのサイズを変更すると(ちょうど微調整)、フレームサイズの再計算が行われ、すべてのポータルが適切な場所に再配置されます。私の説明からどんなアイデアですか? – Elijah

0

ボーダーレイアウトを実行していますか?私はExt 4でも同様の問題がありましたが、私は解決できませんでした:

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