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
    }
});

如果您想在商店中使用,请使用autoModelfield 的类型。这种类型可以包含任何对象。这是一个JSFiddle,其中包含模型中的对象列表。

这是您的商店配置的修改。请注意,您可以定义readonly APICRUD API。对于后者,无法将destroy操作保留为未设置。您还需要知道,其中的根属性writer意味着您要对数据进行编码,这意味着所有都可以通过它发送,get这显然不是您想要的。

现在看看这个代理的作用:默认情况下batchtrue它将导致存储在调用同步时立即提交所有更改。如果一个操作有多个更改,代理将提交一组对象而不是单个对象。现在,如果您不关心这一点,您现在需要预测您是否为每个请求获取一个对象或一组对象。我们不希望以这样的方式结束。但是allowSingle作者的属性可以让我们解决这个问题。如果您将其设置为true,即使只有一个对象,它也会始终将一组对象发送回服务器。您现在知道每次都会得到一个数组。

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

如果您想通过单个代理请求以数组的形式从商店提交多条记录,则应将您的 writer配置为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 回答