验证和排序之间可处理的冲突

Handsontable conflict between validating and sorting

在我的 Handsontable 中,我希望允许用户能够按验证失败的行进行排序。我在数据集的开头添加了一个空白列,并且在 aftervalidate 挂钩中,我将此字段设置为 1 用于失败的行。

afterValidate: function (isValid, value, row, prop, source) {
    if (!isValid) hot.setDataAtCell(hot.sortIndex[row][0], 0, "1");
    else if (source=="edit") hot.setDataAtCell(hot.sortIndex[row][0], 0, "");
},
columnSorting: true,
afterColumnSort: function (column, order) {
    hot.validateCells(function (valid) {});
}

我 运行 遇到了一个奇怪的问题,它并不总是标记正确的行。正如您在此 fiddle 中看到的,如果您重复对列进行排序,则在每三次排序时错误标志与无效行不匹配,并且在控制台中有一个 "Uncaught TypeError: Cannot read property '0' of undefined".

https://jsfiddle.net/dk9d1aqr/3/

此外,如果您尝试将 table 设置为开始排序,验证将完全失败:

//validation works with this
columnSorting: true,
//validation fails with this
columnSorting: {column: 2, sortOrder: true},

关于如何使验证和排序协同工作有什么想法吗?

我的问题是我误读了 sortIndex 方法。它应该传递排序的行号和 returns 来自基础数据集的物理行号(从我尝试使用它的方式倒退)。

我必须将 untranslateRow 函数实现为 return 我需要的值。 http://jsfiddle.net/dk9d1aqr/4/

看起来,当您单击 headers 进行排序时,它会在升序、降序和未排序之间旋转(此处抛出错误)。我添加了一个 return row; 替代路径,它解决了未捕获的类型错误。