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ストアは最初のスタイルをより好んでいます。2番目の形式を使用する簡単な可能性はありますか、それともクライアントで変換する必要がありますか?

4

2 に答える 2

1

変換する必要があると思いますが、フィールドのマッピング属性など、オーバーヘッドを減らす方法は他にもあるので、実際には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

アレイリーダーとajaxプロキシでExt.data.Storeを使用する必要があります。サーバー側にヘッダーは必要ありません。クライアント側のモデルにヘッダーがどのようになるかを定義するだけです。したがって、例として、クライアント側で次のようなコードを使用できます。

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 に答える