4

私はextjs4 MVCで作業しており、単一のリクエストでオブジェクト配列を送信する方法で行き詰まっています。単一のオブジェクトをサーバーに送信する方法を知っています。

1)ここに私のコントローラーコードがあります:-

    check:function () {
    console.log("Inside check function.");
    //creating objects in javascript
    var obj = new Object();
    for (var i = 0; i < 4; i++) {
        var inputs = document.getElementsByName(i);
        var radio = "";
        for (var j = 0; j < inputs.length; j++) {
            if (inputs[j].checked) {
                name = inputs[j].name;
                value = inputs[j].value;
                //obj[i].name1=name;
                obj[i] = {'questionId': name, 'option': value};
                console.log("questionId=" + name + " value=" + value);
                console.log("object name=" + obj[i].questionId + " Object value=" + obj[i].option);

                var check = Ext.ModelManager.create(
                    {
                        questionId: name,
                        option: value,
                    }, 'Balaee.model.qb.QbquestionoptionModel');
                console.log("User Infooooooooo:" + check.get('option'));
            }// End of if statment
        }// End of inner for loop
    }//End of outer for loop
    var storeObject = this.getStore('qb.QbquestionoptionStore');
    storeObject.sync();
    console.log("data send");

}// End of check function

2)モデルクラス:---

Ext.define('Balaee.model.qb.QbquestionoptionModel',{
    extend: 'Ext.data.Model',
    idproperty:'',//fields property first position pk. 
    fields: ['optionId','questionId','isAnswer','option','media','keyword','mediaTypeId',],
    /*associations:[
    {type:'BelongsTo',  model:'Mediatype',  foreignKey:'mediaTypeId'},
    {type:'BelongsTo',  model:'Qbquestion', foreignKey:'questionId'},
    {type:'HasMany',    model:'Qbregistereduserfreequestionawnser', foreignKey:'answerOptionId'},
    ]*/
});

3) ここに私の店:---

Ext.define('Balaee.store.qb.QbquestionoptionStore',{
    extend: 'Ext.data.Store',
    model: 'Balaee.model.qb.QbquestionoptionModel',
    //autoLoad: true,
    proxy:
    {
        type:'ajax',
        api:
        {
            read:'http://localhost/balaee/Balaee/index.php?r=QuestionBank/qbpaper/SetUserAnswer11',
            create: 'http://localhost/balaee/Balaee/index.php?r=QuestionBank/qbpaper/SetUserAnswer12',
            update: 'http://localhost/balaee/Balaee/index.php?r=QuestionBank/qbpaper/SetUserAnswer13',
            //destroy: ,
        },//End of api 
        reader:
        {
            type:'json',
            //root: ,
            //successProperty: ,
        },//End of reader
        writer:
        {
            type:'json',
            root:'data'
        }   
    }//End of proxy
});//End of store

どうすればこれを解決できますか? いくつかの提案をしてください....

4

2 に答える 2

6

さて、最初にそれをJSONとして送信する必要があります(少なくとも私はそれをお勧めします)そしてそれは簡単に行うことができExt.Ajax.request()ます

Ext.Ajax.request({
    url: 'YourURL',
    jsonData: YourObjectRef, // can be any object or JSON string
    success: function(response, opts) {
        // your code
    }
});

また、ストアでそれを実行する場合は、モデルフィールドのタイプautoを使用します。このタイプには、任意のオブジェクトを含めることができます。これは、モデル内のオブジェクトのリストを含むJSFiddleです。

これがストア構成の変更です。APIreadのみまたはCRUDAPIのいずれかを定義できることに注意してください。後で、アクションを未設定のままにすることはできません。また、内のルートプロパティは、データをエンコードすることを意味することを知っておく必要があります。つまり、すべてが送信されますが、これは明らかにあなたが望むものではありません。destroywriterget

次に、このプロキシの機能について説明します。デフォルトでbatchは、同期が呼び出されたときtrueストアがすべての変更を一度に送信します。アクションに複数の変更がある場合、プロキシは単一のオブジェクトではなく、オブジェクトの配列を送信します。これを気にしない場合は、リクエストごとにオブジェクトまたはオブジェクトの配列を取得するかどうかを予測する必要があります。私たちはこのようなことに終わらせたくありません。しかし、allowSingleこれを回避するためのライターのプロパティがあります。これを設定するとtrue、オブジェクトが1つしかない場合でも、常にオブジェクトの配列がサーバーに返されます。これで、毎回配列を取得することがわかりました。

proxy:{
    type:'ajax',
    api: {
        read:'index.php?r=...',
        create: 'index.php?r=...',
        update: 'index.php?r=...',
        destroy: 'index.php?r=...',
    },
    reader: {
        type:'json',
        root:'data'
    },
    writer: {
        type:'json',
        allowSingle: false
    }   
}
于 2013-01-24T11:16:00.040 に答える
1

1 つのプロキシ リクエストでストアから複数のレコードを配列として送信する場合は、allowSingle構成をfalseに設定してライターを構成する必要があります。これにより、単一のモデル インスタンスのみが保存/追加/その他されている場合でも、プロキシ リクエストがリクエスト オブジェクトを配列にラップするように強制されます。

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.writer.Json-cfg-allowSingle

writer: {
    type:'json',
    root:'data',
    allowSingle: false
}   
于 2013-01-24T11:35:08.747 に答える