1

model.save()新しいユーザーをPOSTするために使用しようとしました。しかし、リクエストペイロードを確認したところ、データが送信されただけでなく、モデルの他の部分も送信されたことがわかりました。そのため、サーバーはペイロードを解析できません。

生成されたリクエストペイロード:

{"phantom":true,"internalId":"ext-record-58","raw":{},"data":{"userId":0,"userName":"Amy"},"modified":{"userName":""},"hasListeners":{},"events":{},"stores":[],"dirty":true,"id":"AM.model.User-ext-record-58"}

ただし、必要な要求ペイロードは次のようになります。

{"userId":0,"userName":"Amy"}

そして、私が呼び出す前に、私のモデルの「ファントム」が偽であることに気づいていますmodel.save()。しかし、それはリクエストペイロードで真になります。手がかりですか?

モデル:

 Ext.define('AM.model.User',{
        extend: 'Ext.data.Model',
        fields: [
            { name: 'userId', type: 'int' },
            { name: 'userName', type: 'string' },
            { name: 'createdTime', type: 'string' },

        ],
        idProperty: 'userId',
        associations: [
        {
            type: 'hasOne',
            model: 'AM.model.ModelA',
            name:'modelA',
            associationKey:'modelA',
            getterName:'modelA'
        },
        {
            type: 'hasOne',
            model: 'AM.model.ModelB',
            name:'modelB',
            associationKey:'modelB',
            getterName:'modelB'
        }
        ],
        proxy: {
            type: 'rest',
            success:true,
            url:'../restful/users',
            writer:{
                type:'json',
                getRecordData:function(record){ //parse createdTime to the format Y-m-d
                    record.set('createdTime', Ext.Date.format(new Date(record.get('createdTime')), "Y-m-d"));
                    return record;
                }   
            },
            reader: {
                type: 'json'
            }
        }
    });

これは、投稿されるデータがあるビューです。ビューはデータをモデルに入力します。

Ext.define('AM.view.UserRegisterForm',{
    extend:'Ext.form.Panel.',
    alias:'widget.userRegisterForm',
    fields:new Array(), //I want to render the fields in xtemplate, so instead of adding the fields to items, I use an array to manage them.

    retrieveData(model){
        model.set('userName', this.fields[0].getValue());
        model.set('createdTime',this.fields[1].getValue());
    }
}

POSTリクエストを送信するコントローラーの関数:

postUser:function(){
    var userRegisterForm= this.getUserRegisterForm();
    var userModel = this.getUserModel();
    var user= new userModel();
    var me = this;

    userRegisterForm.retrieveFieldData(user);
    console.log(user); //the data in console looks fine!
    user.save({
        success: function(response) {
            //do something...
        },failure:function(response) {
            alert('fail');
        }
    });
}
4

1 に答える 1

3

レコードデータを返すことだけを目的としているので、オーバーライドすると完全なレコードが返されます。getRecordDatarecord.getData()

いくつかの追加のアドバイス。モデルの作成日を設定するためにgetRecordDataをオーバーライドしないでください。モデルのdefaultValueプロパティを使用して、日付が存在しない場合は新しい日付を割り当てます。

于 2012-10-08T13:28:03.367 に答える