我们不能用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
答案 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));
});
}
}