3

別のモデルへの関連付けを含むモデルがあります。フィールドのマッピング属性を使用して、ネストされたデータをフォームに表示できます。例:

Ext.define('Example.model.Request', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'id',
            type: Ext.data.Types.NUMBER,
            useNull: false
        }
        {
            name: 'plan_surveyor',
            mapping: 'plan.surveyor',
            type: Ext.data.Types.STRING
        }
    ],

    associations: [
               {type: 'hasOne', associationKey: 'plan', getterName:'getPlan', model: 'Specs.model.Plan'}
              ],

    proxy: {
            type: 'direct',
            api: {
                read: requestController.load,
                 update: requestController.update,
            },
            reader: {
                type: 'json',
                root: 'records'
            },
            writer: {
                type: 'json',
                writeAllFields: true,
                nameProperty: 'mapping'
            }
        }

    });

このメソッドを使用すると、plan_surveyor を参照することで、plan.surveyor の値をフォームに表示できます。Form.loadRecord(model) を呼び出して、モデルからフォームにデータを取得します。

ただし、データをサーバーに送り返そうとすると、次のエラーが表示されます。

Error performing action. Please report the following: "Unrecognized field "plan.surveyor"

最初に Form.updateRecord(model) を呼び出し、次に model.save() を呼び出して、サーバーに保存しようとしています。「plan.surveyor」がプロパティ名ではなく、ネストを適切に処理することをライターに理解させる方法はありますか?

私はこれを最初から正しい方法で行っていますか、それともフォームデータの設定を処理し、より手動でモデルにロードし直す必要がありますか? ネストされたデータは、一般的に十分にサポートされていないようです - 何か推奨事項はありますか?

4

1 に答える 1

0
    Ext.define('Example.model.Request', {
        extend: 'Ext.data.Model',

        fields: [
            {
                name: 'id',
                type: Ext.data.Types.NUMBER,
                useNull: false
            }
            {
                name: 'plan_surveyor',
                mapping: 'plan.surveyor',//change to 'plan_surveyor'
                type: Ext.data.Types.STRING
            }
        ],

コメントに表示される変更は、データ インデックスが上記の形式で指定されているためです。データ インデックスではない時間は列または extjs の準備であるため、うまく機能するように変更してください。

うまくいかないので、ホールコードを送ります

于 2013-03-21T12:39:35.597 に答える