2011-04-19 56 views
1

2个相同的显示值不变化的值:当膨胀时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,这是地址类型(家庭,工作等)。

在这种情况下这两个“家庭”地址列(同一类型,但不同的地址),如果我改变从一个“家”的地址组合框其他 - 美其名曰:

this.entityAddressField.getValue(); 

将返回最初选择的项目的entity_address_id,而不是新选择的项目。

是否有我不知道的规则,即使两个值之间的值域是唯一的,防止组合框具有相同的displayField设置的两个记录?

还是我失去了什么东西?

回答

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'} 
    }); 
+0

如果我的理解正确,这个动态字段将不得不被用作组合框的displayField以便工作? – Keylan 2011-05-13 16:20:04

0

这听起来像你有一个类似的问题this one。确保在商店或读者中设置了idProperty。这是商店用来唯一标识它包含的记录的东西。