ExtJS: программная замена элементов в ComboBox - PullRequest
1 голос
/ 23 сентября 2011

Я только что набрал еще один пост и на полпути выяснил свою проблему. Посмотрим, случится ли это снова.

Мне нужно иметь возможность обновить другой выпадающий список, если выбран один. Моя проблема в том, что вторичный выпадающий не загружается с первого раза; ничего не происходит на странице. Если пользователь выбирает один и тот же элемент во второй раз, то все работает нормально.

Я программно генерирую кучу ComboBox:

var item = new Ext.form.ComboBox({
                        store: store,
                        id: input.id,
                        name: input.id,
                        displayField: 'description',
                        valueField: 'id',

                        mode: 'local',
                        forceSelection: true,
                        triggerAction: 'all',
                        emptyText: 'Select one...',
                        typeAhead: false,
                        editable: true,
                        allowBlank: allowBlank,
                        selectOnFocus:true,
                        fieldLabel: input.label,
                        listeners: {
                            scope: this,
                            'select': checkDependencies
                        },
                        autoHeight: true
                    });

Моя проблема возникает, когда я пытаюсь обновить зависимый выпадающий список. Вот функция, которая вызывается, когда пользователь выбирает опцию:

function checkDependencies(el, ev){
    debug(el);
    debug(el.value);
    var val = el.value;
    if (Ext.isArray(dependencies[val])) {
        var id = dependencies[val]['changeId'];
        var input = Ext.getCmp(id);
        var vals = dependencies[val]["vals"];
        input.store.removeAll();
        gridForm.doLayout();
        debug("num elements: " + vals.length);
        input.autoHeight = true;
        for (var i=0;i<vals.length;i++) {
            input.store.add(vals[i]);
        }
        gridForm.doLayout(false,true);
    }
}

Поражает все строки отладки. В списке есть элементы, но, как я уже сказал, первый раз, когда пользователь выбирает элемент, он не работает, но последующий выбор работает нормально.

Я закончил тем, что выложил doLayouts везде, но, похоже, это не помогло.

1 Ответ

2 голосов
/ 23 сентября 2011

Попробуйте установить queryMode: 'local' на дополнительном поле, а в вашем checkDependencies, сделав input.lastQuery = ''.

...