0

わかりました、ExtJS4 を使用していますが、私はこの人がしたのとは正反対の問題を抱えています:
ExtJS JsonStore を取得して、JSON データをリクエスト本文に直接入れるにはどうすればよいですか?

私のアプリケーションでは、ネストされたデータ構造が関連付けられたモデルと共にロードされています。

バックエンドの CakePHP は、(疑似コードで) 保存時に次の形式を想定しています:

[
  {
    [Model]
      [Field1]: [Value1],
      [Field2]: [Value2],
      [Field3]: [Value3]
  },
  {
    [Model]
      [Field1]: [Value1],
      [Field2]: [Value2],
      [Field3]: [Value3]
  }
]

ExtJS が現在サーバーに送信しているものは次のとおりです。

[
  {
    [Field1]: [Value1],
    [Field2]: [Value2],
    [Field3]: [Value3],
    [Model] : null
  }
]

そのため、何らかの理由でモデルを null 値として含め、パラメータを Json オブジェクトのルート ノードに配置しています。

サーバーは同様の方法でクライアントにデータを送信しますが、Json プロキシの Json リーダーにはレコード パラメータがあります (こちらを参照)。残念ながら、Json Writer にはそのようなプロパティはありません (設定しようとしたため、文書化されていません)。

現在、バックエンドでの私の回避策は次のとおりです。
$json = Set::insert($json, 'Model', $json);
しかし、これを達成するためのより良い方法があれば良いでしょう。

更新: さらに拡張するために、関連付けられたモデルをクライアントに自動的に入力するネストされた Json データをロードする 1 つのストアをロードしています。(これはすべて、カスタム コードを使用せずに Extjs メソッドで実行されます)。

Json ライターでルート プロパティを試してみましたが、残念ながらバッチ レコードを使用すると、リクエストが次のようにフォーマットされます。

{
  [Root] : [
    {
      [Field1]: [Value1],
      [Field2]: [Value2],
      [Field3]: [Value3],
      [Model] : null
    },
    {
      [Field1]: [Value1],
      [Field2]: [Value2],
      [Field3]: [Value3],
      [Model] : null
    }
  ]
}

Bancha ( http://banchaproject.org ) も試してみましたが、Sencha Architect (このプロジェクトで使用されています) で動作させることができず、現時点で提供されている解決策は「回避策」でした (私は働くことができませんでした)。

ありがとう、-T6

4

2 に答える 2

1

modelName:nullを使用すると、カスタムコードがすでにここにあるように見えます。名前付きオブジェクトのデータを取得するために、WriterにはExtJSのプロパティ「root」とSenchaTouchのプロパティ「rootProperty」があります。これが役立つ場合があります。

このマーシャリングのすべてを実行するフレームワークもあります。banchaproject.orgを参照してください。ExtJSと同様に少しコストがかかりますが、この作業の多くは実行されます。

于 2013-01-06T02:23:27.697 に答える
0

Writer がリクエストを送信するフォーマットをカスタマイズする必要がある場合は、"独自のカスタム ライターを作成し (Ext.data.writer.Json を拡張)、任意のロジックで writeRecords() メソッドを上書きしました。リクエストを正しくフォーマットする必要がありました。

于 2013-01-04T14:36:26.030 に答える