IE中的ExtJS组合框问题

时间:2009-03-25 15:01:03

标签: javascript internet-explorer extjs

我有一个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"}]}

1 个答案:

答案 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'}])
});