javascript - 如何在 Ext.js 中进行同步时根据响应状态执行操作
问题描述
这是我的商店 MyStore.js
Ext.define('myProject.store.MyStore', {
config:{
storeId: 'MyStore',
autoLoad: false,
autoSync: false,
allowSingle: true,
clearOnPageLoad: true,
model: 'abc.model.MyStoreModel',
proxy: {
type: 'rest',
actionMethods: {create: 'POST', read: 'GET', update: 'POST', destroy: 'POST'},
url:'/services/rest/MyService/myService',
reader: {
type: 'json',
rootProperty:MyServiceView.elements.collection',
successProperty : 'success'
},
writer:
{
type: 'json',
root: 'MyServiceDataView',
nameProperty: 'mapping',
expandData : true
},
listeners: {
exception: function(proxy,response,operation){
}
}
}
}
});
这是我的模特
Ext.define( 'myProject.model.MyStoreModel', {
extend: 'Ext.data.Model',
config:{
idProperty: 'keyStr',
fields:[
{
name: 'keyStr',
type: 'string',
},
{
name: 'sId',
type: 'int'
},
{
name: 'dCode',
type: 'string'
},
{
name: 'sNumber',
type: 'int'
}
]
},
});
在我的 Controller.js 中,我有这个方法
syncMyStore: function()
{
var deferred = Q.defer();
var successfulSync= 'false';
var me = this;
var myStore = Ext.getStore('MyStore');
if(this.isSyncRequires(myStore)) //assume this is always true
{
myStore.sync({
success: function () {
successfulSync = 'true';
deferred.fulfill();
}
});
}
else
{
deferred.fulfill();
}
return successfulSync;
},
- 假设我的商店中有 5 条记录,即 record0、record2 ...record4。
- 对于每条记录,它都在调用 Rest Service。所以总共有5个休息电话
要求1:我想根据状态码执行一些操作,而不是使用成功属性。即如果状态码为200,则认为它成功。
要求 2:在每次休息呼叫之后,我想根据该特定记录的响应状态 (200) 删除记录/将脏标记为假。
意思是,如果状态码是 200,假设记录 1 和记录 2,那么我只想删除/标记记录 1 和记录 2 的脏=假。
如果你能帮我解决这个问题,我会非常感谢你。
解决方案
假设record0,record1,record3 ..有一些独特的识别方式。为每条记录进行 ajax 调用(REST api 调用),然后如果响应为 200,控制将点击“成功”功能。然后,如果响应具有识别记录的数据,则选择该记录并将其脏标志更改为 false。在失败函数中执行相同的操作并将脏标志更改为真。您需要遵守两件事才能做出更好的回答
- 你会使用记录作为你的 rest api 调用的有效负载吗?
- 响应是否有指示记录,即我将有与记录相关的指南?