Sencha Touch 2 vbox 和 children 的高度
Sencha Touch 2 vbox and height of children
我在尝试理解 Sencha Touch 2 中的 vbox 格式时遇到了问题。我的目标是让每个 child 都是全高(flex 将屏幕分成几部分)。为简单起见,我有一个详细视图,显示一条记录数据,然后是与该记录相关的项目列表。
现在,使用 flex,每个 child 都是一个设置的高度和滚动本身。我希望它们全高并且 parent 仅滚动。如果我把 flex 拿出来,什么也没有显示。
Ext.define('app.view.MainView', {
updateData : function(data) {
var panels = this.query('panel[tpl]'),
pLen = panels.length,
panel;
for ( p = 0; p < pLen; p++) {
panel = panels[p];
panel.setData(data);
}
this.callParent(arguments);
},
extend: 'Ext.Container',
xtype: 'mainView',
config: {
layout: {
type: 'vbox'
},
scrollable: true,
title: '',
items: [
{
xtype: 'panel',
flex: 1,
scrollable: true,
styleHtmlContent: true,
tpl: Ext.create('Ext.XTemplate',
'<div class="view-top" id="view-{id}">' +
'<div>{body}</div>' +
'</div>')
},
{
xtype: 'component',
cls: 'dark',
html: 'Top View'
},
{
flex: 1,
xtype: 'list',
store: 'ViewStore',
variableHeights: true,
itemTpl: [
'<div>{subject}</div>'
]
}
]
}
});
已找到解决方案,对于那些可能遇到同样问题的人,我会 post 解决方案。
基本上我必须在绘制视图后计算每个列表元素的高度,然后将列表的 id 高度设置为新高度(注意:我必须将 itemcount + 5 添加到总数中每件物品的高度)
Ext.define('app.view.ViewMain', {
updateData : function(data) {
var panels = this.query('panel[tpl]'),
pLen = panels.length,
panel;
for ( p = 0; p < pLen; p++) {
panel = panels[p];
panel.setData(data);
}
this.callParent(arguments);
},
extend: 'Ext.Container',
xtype: 'viewMain',
config: {
layout: {
type: 'vbox',
align: 'stretch'
},
scrollable: true,
title: '',
items: [
{
xtype: 'panel',
height: 'auto',
scrollable: null,
styleHtmlContent: true,
tpl: Ext.create('Ext.XTemplate',
'<div class="guest-top" id="view-{id}">' +
'<div>{body}</div>' +
'</div>')
},
{
xtype: 'component',
cls: 'dark',
html: 'Guest Panels'
},
{
xtype: 'list',
id: 'panelList',
store: 'ViewStore',
height: 1000,
scrollable: false,
variableHeights: true,
itemTpl: [
'<div>{subject}</div>'
]
}
],
listeners: {
painted: function(element, eOpts){
var totalHeight = 0;
var items = Ext.getCmp('panelList').getViewItems();
var itemsLn = items.length;
for (i = 0; i < itemsLn; i++) {
item = items[i];
totalHeight = totalHeight + item.element.dom.clientHeight;
}
Ext.get('panelList').setHeight(totalHeight + itemsLn + 5);
}
}
}});
我在尝试理解 Sencha Touch 2 中的 vbox 格式时遇到了问题。我的目标是让每个 child 都是全高(flex 将屏幕分成几部分)。为简单起见,我有一个详细视图,显示一条记录数据,然后是与该记录相关的项目列表。
现在,使用 flex,每个 child 都是一个设置的高度和滚动本身。我希望它们全高并且 parent 仅滚动。如果我把 flex 拿出来,什么也没有显示。
Ext.define('app.view.MainView', {
updateData : function(data) {
var panels = this.query('panel[tpl]'),
pLen = panels.length,
panel;
for ( p = 0; p < pLen; p++) {
panel = panels[p];
panel.setData(data);
}
this.callParent(arguments);
},
extend: 'Ext.Container',
xtype: 'mainView',
config: {
layout: {
type: 'vbox'
},
scrollable: true,
title: '',
items: [
{
xtype: 'panel',
flex: 1,
scrollable: true,
styleHtmlContent: true,
tpl: Ext.create('Ext.XTemplate',
'<div class="view-top" id="view-{id}">' +
'<div>{body}</div>' +
'</div>')
},
{
xtype: 'component',
cls: 'dark',
html: 'Top View'
},
{
flex: 1,
xtype: 'list',
store: 'ViewStore',
variableHeights: true,
itemTpl: [
'<div>{subject}</div>'
]
}
]
}
});
已找到解决方案,对于那些可能遇到同样问题的人,我会 post 解决方案。
基本上我必须在绘制视图后计算每个列表元素的高度,然后将列表的 id 高度设置为新高度(注意:我必须将 itemcount + 5 添加到总数中每件物品的高度)
Ext.define('app.view.ViewMain', {
updateData : function(data) {
var panels = this.query('panel[tpl]'),
pLen = panels.length,
panel;
for ( p = 0; p < pLen; p++) {
panel = panels[p];
panel.setData(data);
}
this.callParent(arguments);
},
extend: 'Ext.Container',
xtype: 'viewMain',
config: {
layout: {
type: 'vbox',
align: 'stretch'
},
scrollable: true,
title: '',
items: [
{
xtype: 'panel',
height: 'auto',
scrollable: null,
styleHtmlContent: true,
tpl: Ext.create('Ext.XTemplate',
'<div class="guest-top" id="view-{id}">' +
'<div>{body}</div>' +
'</div>')
},
{
xtype: 'component',
cls: 'dark',
html: 'Guest Panels'
},
{
xtype: 'list',
id: 'panelList',
store: 'ViewStore',
height: 1000,
scrollable: false,
variableHeights: true,
itemTpl: [
'<div>{subject}</div>'
]
}
],
listeners: {
painted: function(element, eOpts){
var totalHeight = 0;
var items = Ext.getCmp('panelList').getViewItems();
var itemsLn = items.length;
for (i = 0; i < itemsLn; i++) {
item = items[i];
totalHeight = totalHeight + item.element.dom.clientHeight;
}
Ext.get('panelList').setHeight(totalHeight + itemsLn + 5);
}
}
}});