我已经阅读了tutorial关于使用自定义组件为Store中的每个元素创建DataView
的信息。它说关于将记录的字段映射到DataItem
中的组件,但我的问题是如何定义将组件添加到DataItem
的顺序。
例如,我有这样的DataItem:
Ext.define('demo.view.CottageItem', {
extend: 'Ext.dataview.component.DataItem',
requires: ['Ext.Label', 'Ext.Array', 'Ext.Img'],
xtype: 'listitem',
config: {
layout: {
type: 'hbox',
align: 'center',
pack: 'start',
},
title: {
flex: 1
},
photo: {
width: '140px',
height: '140px'
},
dataMap: {
getTitle: {
setHtml: 'title'
},
getPhoto: {
setSrc: 'photo'
}
},
styleHtmlContent: true
},
applyTitle: function(config) {
return Ext.factory(config, Ext.Label, this.getTitle());
},
updateTitle: function(newTitle, oldTitle) {
if (oldTitle) {
this.remove(oldTitle);
}
if (newTitle) {
this.add(newTitle);
}
},
applyPhoto: function(config) {
return Ext.factory(config, Ext.Img, this.getPhoto());
},
updatePhoto: function(newImage, oldImage) {
if (oldImage) {
this.remove(oldImage);
}
if (newImage) {
this.add(newImage);
}
},
});
它的布局类型为hbox
,因此我希望首先添加照片,然后添加标题。所以标题就在照片的右侧。我怎样才能做到这一点?
另一个问题是,有没有办法在这个DataItem
中添加另一个容器,其中可以插入我的Label和Image?
更新 现在我的布局看起来像这样:
|标签(标题)| |图像(照片)|
我希望它看起来像这样:
|图像(照片)| |标签(标题)|
答案 0 :(得分:3)
最后我明白了如何解决我的问题,这是我的代码:
Ext.define('demo.view.CottageItem', {
extend: 'Ext.dataview.component.DataItem',
requires: ['Ext.Label', 'Ext.Array', 'Ext.Img'],
xtype: 'listitem',
config: {
layout: {
type: 'hbox',
align: 'center',
pack: 'start',
},
title: {
style: {
'font-weight': 'bold'
}
},
photo: {
width: '140px',
height: '140px'
},
desc: {},
dataMap: {
getTitle: {
setHtml: 'title'
},
getPhoto: {
setSrc: 'photo'
},
getDesc: {
setHtml: 'desc'
},
},
styleHtmlContent: true,
items: [
{
xtype: 'panel',
itemId: 'photoContainer',
},
{
xtype: 'panel',
layout: {
type: 'vbox'
},
itemId: 'textContainer',
flex: 1,
}
],
},
applyTitle: function(config) {
return Ext.factory(config, Ext.Label, this.getTitle());
},
updateTitle: function(newTitle, oldTitle) {
if (oldTitle) {
this.getComponent('textContainer').remove(oldTitle);
}
if (newTitle) {
this.getComponent('textContainer').add(newTitle);
}
},
applyPhoto: function(config) {
return Ext.factory(config, Ext.Img, this.getPhoto());
},
updatePhoto: function(newImage, oldImage) {
if (oldImage) {
this.getComponent('photoContainer').remove(oldImage);
}
if (newImage) {
this.getComponent('photoContainer').add(newImage);
}
},
applyDesc: function(config) {
return Ext.factory(config, Ext.Label, this.getDesc());
},
updateDesc: function(newDesc, oldDesc) {
if (oldDesc) {
this.getComponent('textContainer').remove(oldDesc);
}
if (newDesc) {
this.getComponent('textContainer').add(newDesc);
}
},
});
我没有在root用户中添加组件,而是在DataItem
中定义了两个面板(占位符)。我使用getComponent
方法访问它们并将我的组件添加到所需的位置。这里唯一的问题是添加到textContainer
的项目顺序是未定义的,但在我的情况下,我得到了所需的顺序。
答案 1 :(得分:0)
更改后端存储的排序顺序?我不确定基于组件的DataView,但是基于元素的匹配来存储排序。
要正确设置(或更改)排序,您必须阅读Store的config sorters属性或sort函数
干杯,奥列格