ExtJS版本为ext-4.0.7-gpl
。
同步商店时,服务器以JSON格式返回相同的对象,但填充了生成的ID,我需要将其放入商店数据中。标识符位于封闭的实体中,如下所示:
{
"id": 46,
"name": "Excel",
"typeExt": [{
"ext": "xls",
"id": "137",
"isMain": "false",
}, {
"ext": "xslx",
"id": "136",
"isMain": "false",
}]
}
因此,在服务器端生成了ids 137
和136
。
我试图在商店的代理(编辑:Ajax类型)(这本身可能是错的)中制作它:
proxy.afterRequest = function(request) {
if (request.action === 'create' && request.records.length == 1) {
me.store.autoSync = false;
var created = Ext.JSON.decode(request.operation.response.responseText);
request.records[0].set('id', created.id);
request.records[0].set('typeExt', created.typeExt);
//request.records[0].modified = {};
//request.records[0].dirty = false;
me.store.autoSync = true;
}
if (request.action === 'update' && request.records.length == 1) {
var updated = Ext.JSON.decode(request.operation.response.responseText);
me.store.autoSync = false;
request.records[0].set('typeExt', updated.typeExt);
me.store.autoSync = true;
}
};
查看评论的变体。
如果我没有将autoSync
设置为false
,则会无限循环。
如果我不清除那些read-only
字段modified
和dirty
,则修改后的记录会包含在下一个同步请求中,如果我编辑了另一条记录,则会发送数组的记录破坏了我的服务器端服务。
如果我清除dirty
和modified
,就会在评论行中显示,则更新操作只能运行一次。我在RowEditing插件对话框中按“更新”按钮,但它从未向服务器第二次发送所需的请求。
在后一种情况下,我猜我通过手工编辑只读字段来破坏某些东西,但我找不到。
人们通常如何处理这个问题?
PS。
request.records[0].commit(true); || request.records[0].editing = false;
|| request.records[0].beginEdit();
尝试过没有成功。
答案 0 :(得分:3)
虽然这对Ext 4.0.7没有太大帮助,但在Ext 4.1.0中添加了suspendAutoSync和resumeAutoSync方法。希望这对其他人有用。
答案 1 :(得分:2)
我有这个用于Ext 4.0.7的网格商店,但是与树商店有类似的问题。所有这一切都使用直接代理(和autosync true)
如果您查看Ext.data.Store :::CreateRecords的代码,您会看到商店记录被服务器返回的记录替换,因为订单是相同的。
所以,它非常简单:只需从服务器返回发送到create方法的相同json /对象,但是设置了id,它应该在商店自动更新它们。
我知道这没什么用,但也许会给你一些指导。
我认为如果你提到它会有所帮助: