2016-12-05 140 views
0

我尝试更新手动编辑单元格旁边的单元格的值。在做计算时,我需要改变单元格A2的值,例如。更改单元格值后更改有或没有setDataAtCell/getDataAtCell handsontable

案例步骤: - 编辑A1的值。 - 计算在javascript afterChange事件中完成。 - 现在用计算值更新A2中的值。

在我的情况下getDataAtCellsetDataAtCell方法不起作用。 我收到以下错误。

无法读取属性“getDataAtCell”的未定义

无法读取属性“setDataAtCell”的未定义

请建议如何获取和设置值。用getDataAtCell/setDataAtCell方法或不用这些方法。

下面是代码:

afterChange: function(changes, source) { 
changes.forEach(function(change) { 
var row = change[0]; 
var col = change[1]; 
var oldVal = change[2]; 
var newVal = change[3]; 
alert(row + "\n" + col + "\n" + oldVal + "\n" + newVal); 
/*get value at cell 1,1*/ 
     alert(hot.getDataAtCell(1,1)); 
     hot.setDataAtCell(row, col+1, 'Some new value'); 
     }) 

回答

0

如果你希望有人找出为什么你得到这个错误,你别无选择,只能把你的HandsOnTable的整个定义。你提供的问题是不够的。

不过,我能做的就是给你的working example

getDataAtCell(row,col); 

要至少找出你做错了什么在你的表定义。

请注意,我没有在afterChange事件中直接包含setDataAtCell,因为它会创建一个无限循环。

this example中,我通过停止更改来防止无限循环,如果您尝试将表计算出来,但尝试修改第一列的值并且您会看到我在说什么。


我的建议做出那种计算的是用自己的初始数据(MYDATA的),或复制(取决于您的需求),让你的计算和重新加载数据。假设当你用一个新值修改一个单元格[row,col]时,它还会通过添加刚才在[row,col]中输入的值来修改右边的单元格[row,col + 1] ]与[行的当前值,列+ 1]:

afterChange: function(changes, source) { 
    if(!changes) { 
    return; 
    } 
    $.each(changes, function(index, element) { 
    var row = element[0]; 
    var col = element[1]; 
    var oldVal = element[2]; 
    var newVal = element[3]; 
    if(col+1<hot.countCols()) { 
     myData[row][col+1]=parseInt(myData[row][col+1])+parseInt(newVal); 
     hot.loadData(myData); 
    } 
    }); 
} 

查看完整的示例here。 您可以注意到,再次加载表格将不会像上面那样触发事件后的事件,因此,不要一遍又一遍地重复计算,因为每次都会触发afterChange。

+0

感谢哥们。你的榜样帮了我很多。 – Monsta

相关问题