我有一个ExtJS组合框,后面有一个远程数据存储。在所有浏览器中它都可以正常工作,除了IE(我测试过的所有版本),其中组合框扩展了一个分秒,显示“加载”图标,然后它再次消失。在此之后再次单击它不会使其完全展开。基本上:它没有被填充。
在服务器端,一切都很好。达到Controller动作(使用ASP.NET MVC),返回Json数据。 Json正确形成(所有其他浏览器至少吞下它)。
奇怪的是,当我在Controller动作中放置一个断点时,JsonStore在客户端正确填充。这对我来说表明某种时间问题。
另一个奇怪的事情是,每隔一段时间,它就可以正常工作。也许是因为时机恰好是偶然的。
如果我将组合框模式设置为“本地”并在远程数据存储上强制.load()
,它在IE中也能正常工作。
在我们使用远程数据存储区的所有组合框中都存在此问题。
我有以下JsonStore:
var companies = new Ext.data.JsonStore({
url: '/Company/GetCompanies/',
root: 'companies',
fields: [
{ name: 'CompanyID'},
{ name: 'CompanyName'}]
});
组合框:
new Ext.form.ComboBox({
fieldLabel: 'Company',
typeAhead: false,
triggerAction: 'all',
valueField: 'CompanyID',
hiddenName: 'CompanyID',
displayField: 'CompanyName',
mode: 'remote',
lazyRender: true,
store: companies,
allowBlank: true,
editable: false,
listeners: {
'focus': function(){
if(companies.data.length > 0)
{
debugger; // This is only ever fired after the aforementioned breakpoint method.
}
}
}
})
Controller返回的Json:
{"companies":[{"CompanyID":1,"CompanyName":"Test"},{"CompanyID":2,"CompanyName":"Test1"
},{"CompanyID":3,"CompanyName":"Test2"}]}
答案 0 :(得分:4)
数字,我在发布有关它的问题后几分钟就制定了解决方案。
我切换到了Store而不是JsonStore并指定了代理的method: 'GET'
属性并且它有效。我不知道为什么它确实有效,为什么只有IE有问题呢。我的Controller操作接受GET和POST,所以不是这样。
商店:
var companies = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({ url: '/Company/GetCompanies/', method: 'GET' }),
reader: new Ext.data.JsonReader({ root: 'companies' }, [{ name: 'CompanyID', mapping: 'CompanyID' }, { name: 'CompanyName', mapping: 'CompanyName'}])
});