我已经创建了一个自定义函数,该函数根据以下Handsontable链接中的说明在afterChange单元事件上执行。Handsontable - afterChangeEvent如何检测整行何时被删除或添加
https://docs.handsontable.com/0.15.0-beta3/Hooks.html
而且我可以根据被更改精每个单元执行操作。根据以下代码。
var hot = new Handsontable(container, {
data: data(),
minSpareRows: 1,
rowHeaders: true,
colHeaders: ['some array of headers']
afterChange: function (changes, source) {
onChangeHandler(this, changes, source);
}
});
var onChangeHandler = function (hot_instance, changes, source) {
var changesLength;
var changePayloadtoServer = [];
if (changes != null) {
changesLength = changes.length;
} else {
changesLength = 0;
}
for (var i = 0; i < changesLength; i++) {
var row = changes[i][0],
col = changes[i][1],
oldVal = changes[i][2],
newVal = changes[i][3],
var trigger = false
// How to I determine that a whole row has been deleted/added here?
// trigger = some check that a whole row has been deleted/added.
if (trigger == true) {
// Perform action on row deletion
// i.e. CASCADE DELETE query on database
// Perform action on row addition
// i.e. INSERT INTO query on database
} else {
// Perform normal on cell change
// i.e. UPDATE query on database
}
}
}
但是,我无法弄清楚如何确定整个行已被删除或添加的变化。鉴于此afterChange事件中提供的更改数据的格式如下:
[
{changedRowNumber, chnagedColumnName, oldCellValue, newCellValue}
, {changedRowNumber, chnagedColumnName, oldCellValue, newCellValue}
, {changedRowNumber, chnagedColumnName, oldCellValue, newCellValue}
, {changedRowNumber, chnagedColumnName, oldCellValue, newCellValue}
, ... etc.
]
我已经创建了一个示例小提琴。请参阅以下链接。
https://jsfiddle.net/JoshAdams/go898kq6/
有谁知道什么时候一整排被添加或删除我如何检测?
感谢您的回应。这有点回答我的问题。当您从上下文菜单中选择“删除行”和“插入行”功能时触发两个事件。但是,我还希望在“删除特定行内的所有数据”(即某人突出显示该行然后在其键盘上点击DELETE)以及“当前没有数据存在于特定行中并且新值是第一次输入“(即有空行,然后有人将数值1输入第一列)。是否有可能实现这一目标? – Josh
是的,用afterChange事件,如果你使用getData(row,row,col,col)(这个函数需要4个参数,因为你可以用它得到整个表的范围),你只需检查每个值是否为“ “的排列(发生变化的地方)。你想让我用一个例子来编辑我的答案吗?如果有帮助,我可以提供一个。 (虽然可能不是一个完整的:)) – fab
听起来像一个计划,你可以提供一个例子,虽然建议? :) – Josh