如何在ExtJS中禁用存储的自动同步
ExtJS版本是如何在ExtJS中禁用存储的自动同步,extjs,extjs4,Extjs,Extjs4,ExtJS版本是ext-4.0.7-gpl 同步存储时,服务器以JSON格式返回相同的对象,但使用生成的ID填充,我需要将其放入存储数据中。标识符位于封闭的实体中,如下所示: { "id": 46, "name": "Excel", "typeExt": [{ "ext": "xls", "id": "137", "isMain": "false", }, { "ext": "xslx",
ext-4.0.7-gpl
同步存储时,服务器以JSON格式返回相同的对象,但使用生成的ID填充,我需要将其放入存储数据中。标识符位于封闭的实体中,如下所示:
{
"id": 46,
"name": "Excel",
"typeExt": [{
"ext": "xls",
"id": "137",
"isMain": "false",
}, {
"ext": "xslx",
"id": "136",
"isMain": "false",
}]
}
因此,id137
和136
是在服务器端生成的
我试图在商店的代理中实现它(编辑:Ajax类型)(这本身可能是错误的):
请参阅注释的变体
如果我不将autoSync
设置为false
,它将无限循环
如果我没有清除那些只读
字段修改的
和脏的
,修改后的记录将包含在下一个同步请求中,如果我编辑了另一条记录,它将发送一组记录,中断我的服务器端服务
如果我清除了dirty
和modified
,如注释行所示,则更新操作只工作一次。我在RowEditing插件对话框中按下更新按钮,但它不会第二次向服务器发送所需的请求
在后一种情况下,我想我手工编辑只读字段时弄坏了一些东西,但我找不到什么
人们通常如何处理这些问题
附言
我们也尝试了,但没有成功。我在Ext 4.0.7的网格存储中使用了此功能,但在树存储中也有类似的问题。所有这些都是通过直接代理实现的(并且自动同步为true) 如果查看Ext.data.Store::onCreateRecords的代码,您将看到存储记录被服务器返回的记录替换,因为顺序相同 因此,这非常简单:只需从服务器返回发送给create方法的相同json/对象,但是设置了id,它应该在存储中自动更新它们 我知道这没有多大帮助,但也许会给你一些指导 我认为如果你提到:
- 您正在使用的代理类型
- 确切的ext版本
- 可能是启动记录创建的代码
选择器
,它打开一个网格来编辑typeExt
子数组。有两种方法,valueToRaw
和rawToValue
可以从typeExt
数组中生成字符串,数组由ext
字段串联而成。实际上,使用Picker
它可以工作,但是他们希望我允许手工编辑连接的字符串,并从中生成一个通用的typeExt
数组。我调试了该代码,以确保pickerfield
相应地更新。。。如果我找到了如何暂时禁用自动同步的方法,而问题仍然存在,我将仔细研究该代码,可能在同步此系统失败后。再次感谢,尽管您的答案并不完全针对我的问题,但您帮助我解决了我的问题。我想接受你的回答,但我想这不是网站的规则。你可以修改你的答案,用“没有好办法禁用自动同步”,我会接受的,好吗?
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;
}
};
request.records[0].commit(true); || request.records[0].editing = false;
|| request.records[0].beginEdit();