【问题标题】:Handsontable afterCreateRow fires multiple times when pasting rows粘贴行时,Handsontable afterCreateRow 触发多次
【发布时间】:2015-09-29 08:04:21
【问题描述】:

我的场景:我有一个有四行的表。前三行是数据,第四行是空白。我突出显示整个前三行,复制,然后粘贴到第四行。 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。我怎样才能做到这一点?

【问题讨论】:

  • 你能提供一个小提琴吗?这是预期的行为,但如果您向我们展示一些代码,我们可以为您提供帮助。
  • 我添加了一些示例代码。这够了吗?
  • 我没看到。可动手操作的代码在哪里?
  • 对不起。现在我添加了一个 jsfiddle。

标签: javascript handsontable


【解决方案1】:

您可以使用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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 2011-11-02
    • 2011-07-30
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多