Handsontable afterCreateRow срабатывает несколько раз при вставке строк

Мой сценарий: у меня есть таблица с четырьмя строками. Первые три строки заполнены данными, а четвертая строка пуста. Я выделяю все первые три строки, копирую и вставляю в четвертую строку. 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 только один раз для каждого действия пользователя. Как я могу этого добиться?


person Aaron    schedule 10.07.2015    source источник
comment
Не могли бы вы предоставить скрипку? Это предполагаемое поведение, но мы можем помочь вам, если вы покажете нам код.   -  person ZekeDroid    schedule 12.07.2015
comment
Я добавил пример кода. Этого достаточно?   -  person Aaron    schedule 14.07.2015
comment
Я этого не вижу. Где код ручного стола?   -  person ZekeDroid    schedule 14.07.2015
comment
Извини. Теперь я добавил jsfiddle.   -  person Aaron    schedule 14.07.2015


Ответы (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);
}
person Seamus    schedule 13.07.2015