Ext JS 4.0.2を使用して、高さ制限に達するまで、コンテンツに合わせて自動的にサイズが大きくなるウィンドウを開こうとしています。高さ制限に達すると、ウィンドウは大きくなりなくなり、スクロールバーが表示されます。
これが私がしていることです
Ext.create('widget.window', {
maxHeight: 300,
width: 250,
html: someReallyBigContent,
autoScroll: true,
autoShow: true
});
ウィンドウが最初にレンダリングされるとき、それは本当に大きなコンテンツに十分な大きさであり、maxHeightが許容するよりも大きいです。サイズを変更しようとすると、maxHeightの300pxにスナップダウンします。
最初にレンダリングされたときにウィンドウをmaxHeightに制限するにはどうすればよいですか?
私はまったく同じ問題を抱えており、今のところ私は少し汚いハックをしています:)
_this.on('afterrender', function() {
if (this.getHeight() > this.maxHeight) {
this.setHeight(this.maxHeight);
}
this.center();
}, this);
_
ウィンドウの内容に応じて、afterlayout
イベントを使用する必要があります。 _this.maxHeight
_を使用する代わりに、ビューポート全体を使用するには、Ext.getBody().getViewSize().height
を使用するか、Vanilla JSでは_window.innerHeight
_を使用します。
このバージョンは、ウィンドウに巨大なhtmlだけでなく、他のコンポーネントが含まれている場合でも機能します。
_listeners: {afterlayout: function() {
var height = Ext.getBody().getViewSize().height;
if (this.getHeight() > height) {
this.setHeight(height);
}
this.center();
}}
_
フォームに不明な数のフィールドがあるウィンドウを表示することになった方法(constrain = body.el):
prefForm.itemId = 'prefForm';
win = Ext.create('Ext.window.Window', {
layout : {
type : 'vbox',
align : 'center'
},
buttons : buttons,
maxHeight : constrain.dom.clientHeight - 50,
title : title,
items : prefForm,
listeners : {
afterrender : {
fn : function(win) {
var f = win.down('#prefForm');
f.doLayout();
var h = f.body.dom.scrollHeight;
if (f.getHeight() > h)
h = f.getHeight();
win.setHeight(h + 61);
win.center();
},
single : true
}
}
});
これを行うためのすぐに使える方法がわかりません。ただし、次のアプローチを試すことができます。
ウィンドウのコンテンツをウィンドウ内のコンテナーに配置します(つまり、someReallyBigContentをコンテナー内に配置します)。afterrender
で、その内側のコンテナーの高さを取得し、に基づいて外側のウィンドウの高さを設定します。それ。
これはより良いかもしれません:
bodyStyle: { maxHeight: '100px' }, autoScroll: true,
この設定をウィンドウに追加できます
maximizable: true
必要に応じて、プログラムでそのボタンを「クリック」することができます:)
私は少し違う問題を抱えていました。私の場合、HTMLポップアップウィンドウ内にExtJSコードがあります。そして私は達成しなければなりませんでした:
ポップアップウィンドウのサイズを変更するときにパネルのサイズを変更します。 IvanNovakovのソリューションは私のために働きました。
Ext.EventManager.onWindowResize(function () {
var width = Ext.getBody().getViewSize().width - 20;
var height = Ext.getBody().getViewSize().height - 20;
myPanel.setSize(width, height);
});
今、私はあなたが何をしようとしているのかわかります。設定に欠けているのは高さパラメータだけだと思います。 maxheightと同じ数に設定します。これでうまくいくはずです。setHeight()を呼び出す必要はありません。
これは Ivan Novakov の答えと同じですが、これらのタイプのクラスのonRenderクラスをオーバーライドするときに優先する点が異なります。
これにはいくつかの理由があります。追加のイベントリスナーを削除します。アフターレンダリング時に発生する必要のあることが複数ある場合。これらのタスクの同期を制御できます。
onRender: function(ct,pos) {
//Call superclass
this.callParent(arguments);
if (this.getHeight() > this.maxHeight) {
this.setHeight(this.maxHeight);
}
this.center();
}