我在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
我该如何解决这个问题?请给出一些建议......
答案 0 :(得分: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
}
});
如果您想使用商店,请使用Modelfield的auto
类型。此类型可以包含任何对象。这是一个 JSFiddle ,其中包含模型中的对象列表。
以下是商店配置的修改。请注意,您可以定义仅read
API 或 CRUD API 。对于后者,不可能离开f.e. destroy
操作未设置。您还需要知道writer
中的根属性意味着您要编码您的数据,这意味着所有内容都通过get
发送,这绝对不是您想要的。
现在该代理的功能:默认batch
将为true
,这将导致商店提交所有< / strong>同步调用时立即更改。如果某个操作有多个更改,则代理将提交一个对象数组而不是一个对象。现在,如果您不关心这一点,现在需要预测是否为每个请求获取了一个对象或一组对象。我们不希望最终出现这样的事情。但是作者的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
}
}
答案 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
}