日期:2014-05-16  浏览次数:20905 次

Extjs ComboBox 刷新问题
有个var addModuleWin = new Ext.Window,closeAction: 'hide',里面有个ComboBox
JScript code
 
var urlStore = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: ' <%= path%>/module/prepareModule_getUrls',
method: 'POST'
}),
reader: new Ext.data.ArrayReader({},[
{name: 'value'},
{name: 'text'}
])
  });

var urlComboBox = new Ext.form.ComboBox({
fieldLabel: '路径',
            xtype: 'combo',
            hiddenName: 'prapareModuleid',
            emptyText: '请选择路径',
            msgTarget: 'side',
            allowBlank: false,
            blankText: '路径不能为空',
            triggerAction: "all",
            displayField: 'text',
            valueField: 'value',
            editable : false,
            store: urlStore,
            mode: 'remote',
            width: 230
});

当第一次加载addModuleWin的时候,urlComboBox 会显示值,然后关闭(隐藏)addModuleWin(closeAction: 'hide')
当前触发一个事件时
JScript code

urlComboBox.store.reload();
                            addModuleWin.show();


当前urlComboBox 里面却是空白没有值,恶心的是偶尔运行的时候却有值,大概运行10次中会出现1次会刷新得到值
要怎么实现我要的刷新的功能

------解决方案--------------------
这可能是同步或异步的问题,你可以
var urlStore = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: '<%= path%>/module/prepareModule_getUrls', 
method: 'POST'
}),
reader: new Ext.data.ArrayReader({},[
{name: 'value'},
{name: 'text'}
])
});
store.load();


var urlComboBox = new Ext.form.ComboBox({
fieldLabel: '路径',
xtype: 'combo',
hiddenName: 'prapareModuleid',
emptyText: '请选择路径',
msgTarget: 'side',
allowBlank: false,
blankText: '路径不能为空',
triggerAction: "all",
displayField: 'text',
valueField: 'value',
editable : false,
store: urlStore,
mode: 'remote',
width: 230
});


------解决方案--------------------
CSS code

但ComboBox就是不显示重新加载的数据
在comboBox渲染之前,加载数据。
beforerender: function () {加载数据}
让combobox重新渲染下就应该有数据了

------解决方案--------------------
放在window的show回调中

win.show(null, function(){
urlComboBox.store.reload();
});
------解决方案--------------------
支持6楼的说法。
当win再次show的时候,如果combobox还没有渲染好,但这时数据已经请求了,是不会显示的,
尽量迟一点调用combobox的reload,比如在win的show,或render事件里试试。