0

正常的 JSON 方法如下所示:

{
  "list": [
    {
      "header1": "some value",
      "header2": "some other value"
    },
    {
      "header1": "some value",
      "header2": "some other value"
    },
    {
      "header1": "some value",
      "header2": "some other value"
    },
    ...
  ]
}

但是当我使用它时,会有很大的开销,因为所有的“header1”和“header2”的东西。

所以我想到了一种更像 CSV 的方法:

{
  "headers": [ "header1", "header2" ],
  "list": [
    [ "some value", "some other value" ],
    [ "some value", "some other value" ],
    [ "some value", "some other value" ],
    ...
  ]
}

但 ExtJS4 商店更喜欢第一种风格。是否有可能使用第二种格式,或者我应该在客户端上转换它?

4

2 回答 2

1

我认为您需要对其进行转换,但是还有其他方法可以减少开销,例如字段上的映射属性,因此您实际上可以只发送一个字母来标识属性,例如:

{
  "list": [
    {
      "1": "some value",
      "2": "some other value"
    },
    {
      "1": "some value",
      "2": "some other value"
    },
    {
      "1": "some value",
      "2": "some other value"
    },
    ...
  ]
}

和领域:

{name: 'header1', type:'string', mapping:'1'}
{name: 'header2', type:'string', mapping:'2'}

这只是一个建议,但这将减少开销。

于 2012-06-21T11:20:17.400 回答
1

您应该将 Ext.data.Store 与数组读取器和 ajax 代理一起使用。您不需要服务器端的任何标头,您应该只定义您的标头在客户端的模型中将是什么。例如,您可以在客户端使用这样的代码:

Ext.define("MyModel", {
    extend: "Ext.data.Model",
    fields: [
        {name: "header1"},
        {name: "header2"}
    ]
});
var theProxy = new Ext.data.proxy.Ajax({
    timeout: 120000,
    method:  "POST",
    url:     "your_url_here",
        reader:  new Ext.data.reader.Array({
            root:          "list"
        })
});
var store = new Ext.data.Store({
    proxy:      theProxy,
    model:      "MyModel"
});

确保在定义模型时字段与从服务器返回的数组的顺序相同。这将是服务器返回的内容:

{
  "list": [
    [ "some value", "some other value" ],
    [ "some value", "some other value" ],
    [ "some value", "some other value" ],
    ...
  ]
}
于 2012-06-21T22:03:57.447 回答