ExtJS Combobox具有2个相同的显示值,不会改变选择值

时间:2011-04-19 17:35:39

标签: javascript extjs

我有一个组合框,其中填充了一个地址列表:

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是唯一的?

或者我错过了其他什么?

2 个答案:

答案 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。它是商店用于唯一标识其包含的记录的内容。