ExtJS:以编程方式替换ComboBox中的元素

时间:2011-09-23 17:31:15

标签: javascript extjs extjs4

我刚刚打了另一个帖子,中途我发现了我的问题。让我们看看它是否会再次发生。

如果选择了给定的下拉列表,我需要能够更新另一个下拉列表。我的问题是第二次没有加载二次下拉;页面上没有任何反应。如果用户第二次选择相同的元素,那么一切正常。

我以编程方式生成了一堆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放在了eveywhere,但它似乎没有帮助。

1 个答案:

答案 0 :(得分:2)

尝试在辅助邮箱中设置queryMode: 'local',并在checkDependencies中设置input.lastQuery = ''