Ext Js Combobox - 同步调用设定值

时间:2011-05-18 06:26:59

标签: javascript extjs

我们不能用Ext.data.Store进行同步调用吗?

我有一个模型,我正在商店里面加载。后来我将它绑定到一个组合框。这个流程很好。

但是当我想为默认选择设置组合值时,我得到JS错误,说明商店内没有元素。原因是,在执行所有JS之后进行了填充存储的ajax调用。我尝试将异步属性设为false,但仍然没有运气!!!

这是我的代码段:

var store = new Ext.data.Store({        
    proxy: {
        type: 'ajax',
        url: '/GetAccounts',
        reader: {
            type: 'json'
        }
    },
    async: false,  //Tried this...no luck
    cache: false,
    autoLoad: true
});

var simpleCombo = Ext.create('Ext.form.field.ComboBox', {
    fieldLabel: 'For ',
    renderTo: 'simpleCombo',
    displayField: AccountName,
    valueField: 'AccountId',
    store: store,
    queryMode: 'local',
    forceSelection: true
});

simpleCombo.setValue(store.getAt(0).get('AccountId')); //JS ERROR AT THIS LINE. No elements in the store

2 个答案:

答案 0 :(得分:2)

在填充商店之前禁用组合。不要乱用同步请求,你会冻结整个页面(甚至是浏览器),直到请求结束。

答案 1 :(得分:1)

我在https://stackoverflow.com/a/12918140/1449525发布了类似的内容,但我采用了这种方法:

将侦听器添加到组合框中,以便在实际呈现组合框时,应尝试设置其值

listeners:{
    scope: this,
    afterRender: this.selectFirstComboItem
}

然后将该方法添加到this(或您喜欢的任何地方)。

selectFirstComboItem: function(combo) {
    // This will tell us if the combo box has loaded at least once
    if (typeof combo.getStore().lastOptions !== "undefined") {
        // Grab the first value from the store
        combo.setValue(combo.getStore().first().get(combo.valueField));
    }
    else {
        // When the store loads
        combo.getStore().on("load", function(store, items){
            // Grab the first item of the newly loaded data
            combo.setValue(items[0].get(combo.valueField));
        });
    }
}