ExtJS Combobox с 2 одинаковыми значениями дисплея, не меняющими значения при выборе - PullRequest
1 голос
/ 19 апреля 2011

У меня есть поле со списком, который заполняется списком адресов:

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, хотя valueField между ними уникален?

Или я что-то пропустил?

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Когда выпадающий список закрыт, он отображает значение 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 голосов
/ 12 мая 2011

Похоже, у вас проблема, аналогичная этой . Убедитесь, что у вас установлен idProperty в вашем магазине или ридере. Это то, что магазин использует для уникальной идентификации записей, которые он содержит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...