1

我有一个 ExtJS 组合框,后面有一个远程数据存储。在所有浏览器中它都可以正常工作,除了在 IE(我测试过的所有版本)中,组合框会扩展一秒钟,显示“正在加载”图标,然后它又消失了。在此之后再次单击它不会使其不再扩展。基本上:它没有被填充。

在服务器端,一切都很好。到达返回 Json 数据的控制器操作(使用 ASP.NET MVC)。Json 格式正确(所有其他浏览器至少会吞下它)。

奇怪的是,当我在 Controller 操作中放置断点时,JsonStore 会在客户端正确填充。这对我来说表明某种时间问题。

另一个奇怪的事情是,每隔一段时间,它就可以正常工作。也许是因为时机恰到好处之类的。

如果我将组合框模式设置为“本地”并在远程数据存储上强制使用 a .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.
          }
        }
    }
})

控制器返回的 Json:

{"companies":[{"CompanyID":1,"CompanyName":"Test"},{"CompanyID":2,"CompanyName":"Test1"
},{"CompanyID":3,"CompanyName":"Test2"}]}
4

1 回答 1

4

数字,我在发布有关它的问题后几分钟就制定了解决方案。

我切换到 Store 而不是 JsonStore 并指定method: 'GET'了代理的属性并且它起作用了。我不知道为什么这确实有效,以及为什么只有 IE 有问题。我的控制器操作同时接受 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'}])
});
于 2009-03-25T15:11:46.250 回答