如何在ExtJS中禁用存储的自动同步

时间:2012-02-02 13:16:36

标签: extjs extjs4

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 137136

我试图在商店的代理(编辑: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字段modifieddirty,则修改后的记录会包含在下一个同步请求中,如果我编辑了另一条记录,则会发送数组的记录破坏了我的服务器端服务。

如果我清除dirtymodified,就会在评论行中显示,则更新操作只能运行一次。我在RowEditing插件对话框中按“更新”按钮,但它从未向服务器第二次发送所需的请求。

在后一种情况下,我猜我通过手工编辑只读字段来破坏某些东西,但我找不到。

人们通常如何处理这个问题?

  

PS。

request.records[0].commit(true); || request.records[0].editing = false; 

|| request.records[0].beginEdit(); 

尝试过没有成功。

2 个答案:

答案 0 :(得分:3)

虽然这对Ext 4.0.7没有太大帮助,但在Ext 4.1.0中添加了suspendAutoSyncresumeAutoSync方法。希望这对其他人有用。

答案 1 :(得分:2)

我有这个用于Ext 4.0.7的网格商店,但是与树商店有类似的问题。所有这一切都使用直接代理(和autosync true)

如果您查看Ext.data.Store :::CreateRecords的代码,您会看到商店记录被服务器返回的记录替换,因为订单是相同的。

所以,它非常简单:只需从服务器返回发送到create方法的相同json /对象,但是设置了id,它应该在商店自动更新它们。

我知道这没什么用,但也许会给你一些指导。

我认为如果你提到它会有所帮助:

  • 您正在使用的代理类型
  • 确切的ext版本
  • 也许是启动记录创建的代码