我有一个动手,当一个单元格被更改时,我想重新计算当前的行值。
我这样做是通过使用afterChange挂钩,进行计算然后使用setDataAtCell设置新的单元格值。
问题是我陷入了无限循环,因为setDataAtCell正在触发它当前正在使用的afterChange。
我已经尝试添加一个false变量并将其设置为true如果已经运行以解决此问题,但这会拒绝工作。即使它确实有效,那么在我计算数据的情况下它也不适用于我,因为这意味着如果第二次更改相同的数据,那么重新计算就不会发生。
关于如何解决的任何想法?
var hot = new Handsontable(container, {
data: data,
stretchH: "all",
rowHeaders: true,
colHeaders: true,
filters: true,
dropdownMenu: true,
formulas: true,
afterChange: function(changes, source) {
if( arguments[1] != "loadData" ) {
if( !changes ) {
return;
}
changedRow = parseInt( changes[0][0] );
changedRow = changedRow + 1;
console.log( '-------' );
// r2 is the current row selected upon mouse up
var currentRow = changedRow;
// Get the current data needed for row calculations
var net = parseInt( hot.getDataAtCell( currentRow, 8 ) );
var netTrade = parseInt( hot.getDataAtCell( currentRow, 9 ) );
var deliveryCost = parseInt( hot.getDataAtCell( currentRow, 11 ) );
var fees = parseInt( hot.getDataAtCell( currentRow, 12 ) );
var totalCost = parseInt( netTrade + deliveryCost + fees );
var netProfit = parseInt( net - totalCost );
var percentProfit = parseInt( netProfit / net );
console.log( 'test' );
// Set the new total cost cell data
hot.setDataAtCell( currentRow, 12, totalCost );
// Set the new net profit cell data
hot.setDataAtCell( currentRow, 13, netProfit );
// Set the new % profit cell data
hot.setDataAtCell( currentRow, 14, percentProfit );
}
},
});