ExtJs 6 - 更改ajax更新请求

问题描述 投票:0回答:2

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 extjs4 upgrade extjs6 extjs-stores
2个回答
1
投票

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'
})

0
投票

只需在Model定义上添加clientIdProperty即可解决问题。

更多信息。在sencha论坛上已经提出了同样的问题,但那里没有提到解决方案。以下是该讨论的链接 -

https://www.sencha.com/forum/showthread.php?301898-Duplicate-newKey-quot-x-quot-for-item-with-oldKey-quot-xx-quot

© www.soinside.com 2019 - 2024. All rights reserved.