使用 ExtJS 4.1 保存一批记录时如何处理单个故障?

Posted

技术标签:

【中文标题】使用 ExtJS 4.1 保存一批记录时如何处理单个故障?【英文标题】:How to handle a single failure during saving a batch of records with ExtJS 4.1? 【发布时间】:2013-02-15 11:59:10 【问题描述】:

假设我有一个包含用户列表的Ext.grid.Panel。经过一些更新操作后,我将这批修改后的记录发送到远程数据库:

["id":1,"login":"Jack","id":2,"login":"Jack"] // request body

在服务器端,我将一条记录存储在数据库中。由于知道登录名必须是唯一的,因此不会存储第二条记录,因为“Jack”不再可用。然后,我必须通知用户他错误地将相关网格单元标记为脏。有没有办法让 ExtJS 处理它?例如 JSON 响应中的标志?


更新

有时我需要更高的精度,仅将单个记录的一个字段标记为无效。举个例子,假设我想更新一条记录的两个字段,“login”和“favorite”:

["id":1,"login":"Jack","favorite":true] // request body

两个字段一起发送到同一个 URL,然后通过两个不同的 SQL 查询分别处理,但是保存“登录”成功而保存“收藏”失败。 ExtJS 是否能够将每个字段与单个 JSON 响应分开处理?


更新

最终,主要问题是:将 ExtJS 4 数据包与服务器端 CRUD API 连接的最佳实践是什么?

您能否分享您在这些相关主题上的经验:服务器端 CRUD 架构、请求正文与 HTTP POST 参数、批量记录与单个记录、错误处理和 JSON 响应...?

这是我自己的工作环境:

ASP.NET 3.5 ExtJS 4.1.1a Ext.data.proxy.Ajax

【问题讨论】:

【参考方案1】:

我发现了一个有趣的资源:@​​987654321@。乍一看,他们似乎实现了自己的客户端和服务器之间的通信逻辑,绕过了框架提供的代理功能。很难深入调查,因为源代码目前不可用。这是一个例子:

请求数据(HTTP POST):

data: 
    "Updated": [
        "Id": 1,
        "Email": "fred@flintstone.com",
        "First": "Fred",
        "Last": "Flintstone"
    ],
    "Created": [
        "Email": "test@test.com",
        "First": "f",
        "Last": "l",
        "PhantomId": "ext-record-1"
    ]

响应数据:

script:"var _m0 = App.Store1.getByInternalId(\"ext-record-1\");_m0.setId(8);_m0.commit();App.Store1.getById(1).commit();"

【讨论】:

以上是关于使用 ExtJS 4.1 保存一批记录时如何处理单个故障?的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ to SQL 时如何处理 SqlException“未找到记录”?

OpenID Connect - 如何处理单次注销

在表中找不到给定记录时如何处理游标中的异常

当您知道没有保存实体时如何处理 CoreData 中的获取请求

将 OpenOffice Calc 文件导出为 PDF 时如何处理打印区域?

应用未运行时如何处理远程通知