extJS comboBox。动态数据加载

时间:2012-02-01 12:37:30

标签: javascript extjs combobox

我编写了以下动态数据上传组合框实现。

代码

Loyalty.tools.DictionaryComboBox = Ext.extend(Ext.form.ComboBox,

 {
    defaultConfig:{

        defaults:{
            labelWidth:150
        },
        displayField:'value',
        valueField:'key',
        forceSelection:true,
        mode:'local',
        typeAhead: true,
        triggerAction: 'all',
        selectOnFocus:true
    },

    constructor:function (config) {
        Ext.apply(config, this.defaultConfig);
        config['store'] = new Ext.data.Store({
            fields:['key', 'value', 'description'],
            proxy:{
                type:'ajax',
                url:config.dictionaryPath + '/' + config.dictionaryName
            }
        });
        Loyalty.tools.DictionaryComboBox.superclass.constructor.call(this, config);
    }

}

 );

我按照以下方式使用

            new Loyalty.tools.DictionaryComboBox({
                fieldLabel: Loyalty.messages['company.grid.filter.forma'],
                dictionaryPath: config.dictionaryPath,
                dictionaryName: 'forma',
                name: 'forma',
                id:'forma',
                allowBlank:true,
                labelWidth:config.labelWidth
            }),

我有两个问题 1)如何在加载组合框时获取列表数据(而不是在第一次单击时) 2)如果我在组合框中放入一个键,以便它立即显示所需的值?

2 个答案:

答案 0 :(得分:1)

1)你如何加载商店。我想你需要添加autoLoad:true就像这样

fields:['key', 'value', 'description'],
autoLoad: true,

2)你问我如何选择组合框

var mycombo = Ext.getCmp('mycombo');
mycombo.setValue(id);

答案 1 :(得分:1)

我决定了我的问题。不幸的是我不得不使用“正确”的metod

Loyalty.tools.DictionaryComboBox = Ext.extend(Ext.form.ComboBox,
    {
        defaultConfig:{

            defaults:{
                labelWidth:150
            },
            displayField:'value',
            valueField:'key',
            forceSelection:true,
            queryMode: 'local',
            typeAhead: true,
            triggerAction: 'all',
            selectOnFocus:true
        },

        constructor:function (config) {
            Ext.apply(config, this.defaultConfig);
            var isStoreProvided = (config['store'] == undefined);
            if (isStoreProvided) {
                var el = this;


   config['store'] = new Ext.data.Store({
                fields:['key', 'value', 'description'],
                autoLoad:true,
                proxy:{
                    type:'ajax',
                    url:config.dictionaryPath + '/' + config.dictionaryName
                },
                listeners: {
                    'load': function() {
                        if (config['initialValue'] != undefined) {
                            el.setValue(config['initialValue']);
                            config['initialValue'] = undefined;
                        }
                    }
                }
            });
        }
        Loyalty.tools.DictionaryComboBox.superclass.constructor.call(this, config);
    }

}

);