リロードを引き起こします。だから、私の考えは、iframeを他の親に接続し、それをポートレットの上に置くことです。以下は、ポートレットコードの例です。
{
title: 'Another Panel 2',
tools: tools,
html: '<div class="frame-bind" style="min-height: 200px;"> </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());
}
}
これは私が解決できないいくつかの位置計算の問題を除いて機能しています。 positionIFrame()は、新しい座標に対して0を返します。 afterLayout()は前回のドロップ完了時にそれを呼び出しますが、最も正確な座標を取得すると仮定していますが、静かに座標を取得しません。ポータルは激しく債券から外れています。ブラウザのサイズを変更すると(ちょうど微調整)、フレームサイズの再計算が行われ、すべてのポータルが適切な場所に再配置されます。私の説明からどんなアイデアですか? – Elijah