我有一个组合框,其中填充了一个地址列表:
this.entityAddressField = new Ext.form.ComboBox(
{
id: 'entityAddressField',
fieldLabel: 'Address',
store: entityAddressStore,
mode: 'local',
width: 250,
valueField: 'entity_address_id',
displayField: 'address_type',
tpl: new Ext.XTemplate(
'<tpl for="."><div class="search-item">',
'<p><b>{address_type}</b></p>',
'<p>{address_1}</p>',
'<p>{address_2}</p>',
'<p>{city}, {state_code} {zipcode}</p>',
'</div></tpl>'
),
itemSelector: 'div.search-item',
hidden: true,
triggerAction: 'all',
listeners: {
select: function(combo, record, index) {
me.entityAddressDisplay.update(address_template.apply(record.data));
me.entityAddressDisplay.show();
}
}
});
列表显示扩展时的完整地址,但一旦选中,组合框将只显示displayField,这是地址类型(Home,Work等)。
如果列出了两个“Home”地址(相同类型但地址不同),如果我将组合框从一个“Home”地址更改为另一个 - 调用:
this.entityAddressField.getValue();
将返回原始选定项目的entity_address_id,而不是新选择的项目。
我是否有未知的规则阻止组合框具有两个具有相同displayField集的记录,即使两者之间的valueField是唯一的?
或者我错过了其他什么?
答案 0 :(得分:1)
当组合框关闭时,它将显示displayField值。它不受组合框上修改的tpl配置的影响。
一种解决方法是在记录定义中创建一个动态字段,将值汇总在一起。
Ext.data.Record.create({
{name: 'address_type', mapping: 'address_type'},
..........,
..........,
..........,
// simple name concat
{name: 'simple_name', mapping: 'address_type+" "+obj.address_1+" "+obj.address_2+" "+obj.city+", "+obj.state_code+" "obj.zipcode'}
});
如果你需要在地址2等可选字段上做条件,你也可以将三元运算符等嵌入到这个字段中。
Ext.data.Record.create({
{name: 'address_type', mapping: 'address_type'},
..........,
..........,
..........,
// simple name concat
{name: 'simple_name', mapping: 'address_type+" "+obj.address_1+" "+(obj.address_2 ? obj.address_2+" ": "")+obj.city+", "+obj.state_code+" "obj.zipcode'}
});
答案 1 :(得分:0)
听起来你遇到了与this one类似的问题。确保您的商店或读者设置了idProperty
。它是商店用于唯一标识其包含的记录的内容。