使用或不使用 setDataAtCell/getDataAtCell handsontable 更改单元格值 afterChange
Posted
技术标签:
【中文标题】使用或不使用 setDataAtCell/getDataAtCell handsontable 更改单元格值 afterChange【英文标题】:change cell value afterChange with or without setDataAtCell/getDataAtCell handsontable 【发布时间】:2017-04-19 08:58:39 【问题描述】:我正在尝试更新已手动编辑的单元格旁边的单元格的值。例如,在进行计算时,我需要更改单元格 A2 的值。
案例步骤: - 编辑 A1 的值。 - 在 afterChange 事件中用 javascript 进行计算。 - 现在用计算的值更新 A2 中的值。
在我的情况下 getDataAtCell 和 setDataAtCell 方法不起作用。 我收到以下错误。
无法读取未定义的属性“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');
)
【问题讨论】:
【参考方案1】:如果您希望有人找出您收到此错误的原因,您别无选择,只能将您的 HandsOnTable 的整个定义。您在问题中提供的内容还不够。
不过,我能做的就是给你一个working example 的:
getDataAtCell(row,col);
至少找出你在表定义中做错了什么。
请注意,我没有将 setDataAtCell 直接包含在 afterChange 事件中,因为它会创建一个无限循环。
在this example 中,如果您尝试在表外进行计算,我会通过停止更改来防止无限循环,但尝试修改第一列的值,您会看到我在说什么。
我对进行这种计算的建议是使用您的初始数据 (myData) 或副本(取决于您的需要)来进行计算并再次加载数据。
假设当你用一个新的值修改一个单元格 [row,col] 时,它也会通过添加你刚刚在 [row,col] 中输入的值来修改右边的单元格 [row,col+1]当前值为 [row,col+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 事件,因此,不要一遍又一遍地进行计算,因为每次都会触发 afterChange。
【讨论】:
谢谢哥们。你的例子对我帮助很大。以上是关于使用或不使用 setDataAtCell/getDataAtCell handsontable 更改单元格值 afterChange的主要内容,如果未能解决你的问题,请参考以下文章
MySQL QueryOptimizer 似乎随机使用索引(或不使用)
如何检查 ReportControl 对象上是不是存在 Reportid 或不使用 *ngif?