使用或不使用 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 中的值。

在我的情况下 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');
      )

【问题讨论】:

【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

可使用或不使用令牌 JWT+PASSPORT 的路线

MySQL QueryOptimizer 似乎随机使用索引(或不使用)

如何检查 ReportControl 对象上是不是存在 Reportid 或不使用 *ngif?

使用 C++ 和 Boost(或不使用?)检查是不是正在使用特定端口?

使用 Restkit 或不使用 CoreData

初始化数组时使用(或不使用)括号