在粘贴行时,Handsontable afterCreateRow多次触发

时间:2015-07-10 14:13:43

标签: javascript handsontable

我的场景:我有一个有四行的表。前三行填充数据,第四行填空。我突出显示整个前三行,复制,然后粘贴到第四行。 Handsontable生成两个新行,为粘贴的数据腾出空间。

我的问题:afterCreateRow事件触发两次,每次触发数量为1.我希望它以2的数量触发一次,因为Handsontable事先知道必须创建两行。

这是展示这种现象的jsfiddle

这是我正在尝试做的事情:

function afterCreateRow(row, amount) {
    for (var i = row; i < row + amount; i++) {
        model.initializeNewRow(i);
        model.calculator.cascadeRow(i);
        model.calculator.calculateRow(i);
    }
    model.calculator.updateTotals();
    model.history.submitBatch();
}

我只想为每个用户操作调用submitBatch一次。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用window.setTimeout()延迟提交,直到某段时间过去而没有新的afterCreateRow()来电:

function afterCreateRow(row, amount) {
    for (var i = row; i < row + amount; i++) {
        model.initializeNewRow(i);
        model.calculator.cascadeRow(i);
        model.calculator.calculateRow(i);
    }
    model.calculator.updateTotals();
    delayed(model.history.submitBatch, 100);
}

var g_id = null;
function delayed(fn, timeoutms){
    if(g_id) window.clearTimeout(g_id);

    g_id = window.setTimeout(fn, timeoutms);
}