ExtJs 6 - 更改ajax更新请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExtJs 6 - 更改ajax更新请求相关的知识,希望对你有一定的参考价值。
ExtJs不希望服务器响应相同的响应来确认更新行而不是ExtJs 4。
我有一个字符串id的表:
Ext.define('App.Product', {
extend: 'Ext.data.Model',
fields: [
{name: 'productid', type: 'string'},
{name: 'ord', , type: 'int'},
(...)
],
idProperty: 'nrproduit'
})
保存更改后,ExtJs客户端将修改后的数据发送到服务器:
[{"ord":1,"productid":"SG30301"},{"ord":3,"productid":"SG30100"}]
在ExtJs 4.2中,它希望服务器返回两个产品的完整数据,如下所示:
{
"success":true,
"data":[{
"nrproduit":"SG30100",
"ord":3,
"author":"...",
"editor":"...",
(...)
},{
"nrproduit":"SG30301",
"ord":3,
"author":"...",
"editor":"...",
(...)
}]
}
在ExtJs 6.2中,这不再有效。我收到了错误
未捕获错误:对于带有oldKey“SG30301”的项目复制newKey“SG30100”
显然,客户端没有考虑idProperty
,但似乎期望行的顺序在响应中与请求中的顺序相同。
有没有办法强制客户端考虑从服务器发回的ID?或者是否有必要更改服务器代码?有没有关于客户端和服务器之间数据同步的ExtJs 4.2和6.2之间究竟有什么变化的文档,请参考这些细节?
ExtJS考虑订单,因为ID可以改变,例如在插入操作期间(如果id是在服务器端生成的)。为了实现这一点,在一般情况下,ExtJS希望以与发送记录相同的顺序从服务器接收结果。
但是,它还有更多。在某些情况下,它使用id而不是订单。您可以阅读Operation.doProcess
以了解ExtJS如何执行它所做的事情,如果您需要不同的行为,可能会覆盖它。
编辑:当模型具有属性clientIdProperty
时使用id,否则它使用顺序。所以,添加它就足够了:
Ext.define('App.Product', {
extend: 'Ext.data.Model',
fields: [
{name: 'productid', type: 'string'},
{name: 'ord', , type: 'int'},
(...)
],
idProperty: 'nrproduit',
clientIdProperty: 'nrproduit'
})
只需在Model定义上添加clientIdProperty即可解决问题。
更多信息。在sencha论坛上已经提出了同样的问题,但那里没有提到解决方案。以下是该讨论的链接 -
以上是关于ExtJs 6 - 更改ajax更新请求的主要内容,如果未能解决你的问题,请参考以下文章