如何使用ExtJS4存储读取JSON中的数据结构等CSV?

时间:2012-06-21 10:52:45

标签: extjs extjs4

正常的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商店更喜欢第一种风格。是否有可能使用第二种格式或我应该在客户端转换它?

2 个答案:

答案 0 :(得分: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'}

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

答案 1 :(得分: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" ],
    ...
  ]
}