ExtJs 4.2 和 ExtJs 6.2 之间的 gridviewdragdrop 发生了什么变化

What has changed in gridviewdragdrop between ExtJs 4.2 and ExtJs 6.2

我正在从 ExtJs 4.2 升级到 ExtJs 6.2,拖放的工作方式在两者之间发生了一些变化。

在 ExtJs 4.2 中,我在网格中简单地使用了它:

Ext.define('App.view.images.List', {
    extend: 'Ext.grid.Panel',
    viewConfig: {
        plugins: {
            ptype: 'gridviewdragdrop',
            containerScroll: true
        },
        enableTextSelection : true
    },

有一个细节可能很重要:商店已订购:

Ext.define('App.store.images.Images', {
    extend: 'Ext.data.Store',
    sorters: [{
        property: 'position'
    }],

使用 ExtJs 4.2,我无需对 drop 事件执行任何操作即可更改记录的顺序。一个简单的拖放改变了线条的顺序。之后我更新了商店中的 position 字段。

在 ExtJs 6.2 中,拖放不会改变行的顺序。它只触发 drag 事件,似乎由事件处理程序中的代码来更改 table 中记录的顺序和网格中的行。

是否存在错误,或者这是 ExtJs 4 和 6 之间拖放功能的变化?

我看起来好像在 ExtJs 6 中,排序器配置优先于拖放。因此,不再可能仅使用拖放来使用排序器重新排序网格。

尝试对已排序的网格重新排序时,drop 事件被触发并接收到预期数据,但网格未重新排序。我们必须更改 属性 商店在 drop 处理程序中排序。然后视图将根据新数据更新。

换句话说:

  • 在 ExtJs 4 中,拖放以可视方式重新排序网格,我们必须更新商店以反映顺序的变化(更新 属性 商店排序依据)。
  • 在 ExtJs 6 中,如果底层存储已排序,则无法通过拖放可视化地重新排序网格,因为排序器优先于拖放强加的顺序。要重新排序网格,我们必须更新 属性 商店在 drop 处理程序中排序。