2015-07-10 69 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); 
}