2015-07-10 2 views
2

Мой сценарий: У меня есть таблица с четырьмя строками. Первые три строки заполняются данными, а четвертая строка - пустой. Я выделяю все первые три строки, копируем, а затем вставляем в четвертую строку. Handsontable создает две новые строки, чтобы освободить место для вставленных данных.Handsontable afterCreateRow срабатывает несколько раз при вставке строк

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

+0

могли бы вы предоставить скрипку? Это намеченное поведение, но мы можем вам помочь, если вы покажете нам какой-то код. – ZekeDroid

+0

Я добавил несколько примеров кода. Этого достаточно? – Aaron

+0

Я этого не вижу. Где код для управления? – ZekeDroid

ответ

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); 
} 
Смежные вопросы