0

JSON POST に hasOne に関連付けられたモデル データを含めるにはどうすればよいですか?

私の Web API では、次の形式の構造化データが必要です。

{
    id: 1234,
    name: 'Aaron Smith',
    address: {
        address1: '1925 Isaac Newton Sq',
        address2: 'Suite 300',
        city: 'Reston',
        state: 'VA',
        zip: 20190
    }
}
4

1 に答える 1

0

@ノニノ

私はそれを行う方法を知っていると思いますが、同様の問題も抱えています。関連データを提供するための関連付けを実際に取得することはできません。とにかく、私がインターネットで見つけたものから、このようなカスタムライターを作成するか、デフォルトのライターで getRecordData: function(record,operation)

これが私のカスタムライターです

Ext.define('Wakanda.writer', {

    extend: 'Ext.data.writer.Json',

   // alternateClassName: 'SimplyFundraising.data.WakandaWriter',

    alias: 'writer.wakanda',

    writeAllFields: false,

    getRecordData: function(record,operation) {
        debugger;
        Ext.apply(record.data,record.getAssociatedData());
        debugger;
        var isPhantom = record.phantom === true,
            writeAll = this.writeAllFields || isPhantom,
            nameProperty = this.nameProperty,
            fields = record.fields,
            data = {},
            changes,
            name,
            field,
            key;

        if (writeAll) {
            // console.log("getRecordData1", this, arguments);
            fields.each(function(field){
                if (field.persist) {
                    debugger;
                    name = field[nameProperty] || field.name;
                    data[name] = record.get(field.name);
                } else {

                }

            });
        } else {
            changes = record.getChanges();
            debugger;
            // console.log("getRecordData2", this, arguments, changes);
            for (key in changes) {
                if (changes.hasOwnProperty(key)) {
                    field = fields.get(key);
                    name = field[nameProperty] || field.name;
                    data[name] = changes[key];
                }
            }
            if (!isPhantom) {
                debugger;

                data[record.idProperty] = record.getId();
                if(operation.action !== 'destroy'){
                data[record.stampProperty] = record.get(record.stampProperty);
                }
            }
        }
        return {'__ENTITIES': [data]};
    }

});

私が考える鍵は、ステートメント Ext.apply(record.data,record.getAssociatedData()); がある getRecordData にあります。record.getAssociatedData が実際にデータを返す場合、Ext.apply ステートメントは現在の record.data と record.getAssociatedData を 1 つの json ファイルにマージします。少なくともこれが起こることを願っています。アソシエーションを正しく設定するまでテストできません。

これが役に立てば幸いです、ダン

  getRecordData: function(record,operation) {
        debugger;
        Ext.apply(record.data,record.getAssociatedData());
        debugger;
于 2013-05-13T17:51:27.590 に答える