1

モデルと、hasOne 関連付けを含む関連モデルの情報を取得しようとしています。次の Sencha ドキュメント ページ ( http://docs.sencha.com/ext-js/4-1/#!/guide/data ) を参照していました。現在、次のサンプルコードが機能しています。

var Mtd = Ext.ModelMgr.getModel('Mtd');
 Mtd.load(4, {
     success: function(mtd){
         console.log("Loaded! " + mtd.get('id'));
         mtd.getTreatmentdesign(function(treatment,operation){
             console.log(treatment.get('id'));
         }, this);
     }
 });

ここで、mtd.getTreatmentdesign() を呼び出すと、情報を取得するために 2 つの要求が行われることに気付きました。最初のものは、私が期待している Mtd 情報を取得することですが、Treatmentdesign 情報を取得する要求も行っています。Mtd の応答には、Mtd 情報と Treatmentdesign 情報が含まれています。そこで、Mtd と Treatmentdesign の情報を 1 回のリクエストで処理したいと考えています。ドキュメントに次のように記載されていることに戸惑いました。

User.load 呼び出しに成功関数を渡したのに、User の投稿やコメントにアクセスするときに渡す必要がなかった理由を不思議に思われるかもしれません。これは、上記の例では、ユーザーを取得するためのリクエストを行うと、サーバーがネストされたすべての投稿とコメントに加えてユーザー データを返すと想定しているためです。上記のように関連付けを設定することで、フレームワークはネストされたデータを単一のリクエストで自動的に解析できます。

では、別のリクエストを行わずに関連情報を取得するにはどうすればよいでしょうか? 複数のリクエストを行うのではなく、単一のリクエストからすべてのjsonを使用したいだけです。

4

2 に答える 2

1

関連付けのassociationKey構成を、HasOne関連付けられたモデルのデータを含むプロパティに必ず設定してください。デフォルトでは、これは関連するモデル クラスの名前で、すべて小文字です。

たとえば、Mtdレコードのデータがサーバーから次の形式で返された場合

{
    ...
    treatmentDesign: {
       ...
    }
}

を に設定associationKey'treatmentDesign'ます。

実際の例を次に示します: http://jsfiddle.net/HP6fq/3/

于 2012-09-01T16:51:31.753 に答える
0

はい、associationKey は動作します

Ext.define('User', {
    extend:'Ext.data.Model',
    fields: ['id', 'name', 'status'],
    associations: [{ type: 'hasOne', model: 'Status', associationKey: 'status'  }]
});

Ext.define('Status', {
    extend:'Ext.data.Model',
    fields: ['id', 'title'],
});

デモはこちら

于 2012-09-15T09:43:43.917 に答える