Handsontable afterChange,做计算,setdatacell陷入循环

时间:2017-09-28 11:59:48

标签: javascript handsontable

我有一个动手,当一个单元格被更改时,我想重新计算当前的行值。

我这样做是通过使用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 );


        }

    },

});

0 个答案:

没有答案