Ext で表示している 2 つのビューにスクロール バーを追加できませんでした。各ビューはベース ビューの拡張であり、ベースにはautoScroll: true
. 要素にoverflow: auto
プロパティが適切に割り当てられていることを確認しました。
私はいくつかの検索を行って、この質問を見つけました。その解決策を適用した後 (この'vbox'
レイアウトを使用していませんでしたが)、問題は解決しませんでした。
ベースビューは次のとおりです。
Ext.define('Our.extensions.baseList', {
extend: 'Ext.view.View',
itemSelector: 'div.postContainer',
autoScroll: true,
initComponent: function(){
this.tpl = new Ext.XTemplate(
'<tpl for=".">',
'<div name="postContainer" class="postContainer">',
// Contains Layout for posts
'</div>',
{ // can run internal functions within a template
createButton: function(idPost){
// Creates layout for buttons and returns it
}
}
);
this.callParent(arguments);
}
});
2 つの子ビューは次のとおりです。
Ext.define('Our.view.post.convList', {
extend: 'Our.extensions.baseList',
alias : 'widget.convList',
emptyText: 'No Conversation Followed',
title: 'Coversations',
initComponent: function(){
this.store = new Ext.create('Ext.data.Store', {
id:'convStore',
model: 'Our.model.Post',
data: []
});
this.callParent(arguments);
}
});
と:
Ext.define('Our.view.post.postList', {
extend: 'Our.extensions.baseList',
alias : 'widget.postList',
emptyText: 'No Posts',
title: 'Posts'
});
最終的に、私の質問は、有効な構成プロパティとして Sencha docs にリストされている構成プロパティExt.view.View
を実際にサポートしているか (または、単に無視しているように見えるか) です。autoScroll
構成をサポートしていないことを知っているlayout
ため、リンクされた質問のソリューションが機能しなかったのはなぜですか。サポートしている場合、スクロールバーを表示するにはどうすればよいですか?
編集
解決策を考え出す試みで私が発見したいくつかのことは、サイズがハードコーディングされている限り(設定されたピクセル数)、ビュー自体にサイズを設定することです。config: を追加しheight: 500,
たり、CSS クラスをheight: 500px;
介したパーセンテージ サイズを持つ CSS クラスを追加したりすることはまったく機能しません。コンポーネントのサイズを変更することさえできません。
2回目の編集
受け取った最初の回答へのコメントで述べたように、コンポーネントはサイズを取得していました1063
(注: 開発環境は 1080x1920 モニター (縦向き) 上にあり、Chrome で実行されている JavaScript コンソールでは、表示されるフレームの高さです) 「目に1063
見える」とは、が追加されているpostPanel
ことを意味します。View
refresh
一時的な解決策を見つけました。残念ながら、実際の製品リリースには理想的ではないと思いますXTemplate
。postPanel
これにより、スクロールバーが強制的に適用されるようです。また、2 つの s のイベントを発生させる のresize
イベントにリスナーを追加しました。postPanel
refresh
View
追加は...
子ビューに:
listeners: {
refresh: function() {
var parent = this.up('postPanel');
if (parent != undefined) {
this.setSize({
width: undefined,
height: parent.getHeight()
});
}
}
}
そしてへpostPanel
:
listeners: {
resize: function() {
var postList = this.down('postList');
if (postList != undefined) {
try {
postList.fireEvent('refresh');
} catch(e) { /* ignored */ }
}
var convList = this.down('convList');
if (convList != undefined) {
try {
convList.fireEvent('refresh');
} catch(e) { /* ignored */ }
}
}
}
これが理想的な解決策ではないと私が感じる主な理由は、ビューの自動サイズ変更が親の半分の幅に壊れていることです (そして、イベントparent.getWidth() / 2
のthis.setSize()
呼び出しで幅を に設定しrefresh
ても、サイズはまったく変更されません。それに加えて、これが低速のコンピューターにオーバーヘッドを追加するかどうかはわかりません。