我正在使用 handsontable js插件。我想在 getCellMeta Hook 中使用 afterChange 函数,但不起作用。
我在使用函数后的afterChange钩子(Hook)中,函数正在工作。但不能在afterChange Hook 中使用。

var container = document.getElementById('t1'),
  options = document.querySelectorAll('.options input'),
  table,
  hot;

hot = new Handsontable(container, {
  autoWrapRow: true,
  startRows: 81,
  startCols: 206,
  autoColumnSize : true,
  stretchH: 'all',
  afterChange : function(change,source) {
      if (source === 'loadData') {
        return;
      }
      var test = this.getCellMeta(change[0],change[1]); // not working, not return "id" meta
      console.log(test);
  }
});

$.ajax({
  url: 'path',
  type: 'GET',
  dataType: 'json',
  success: function (res) {
    var data = [], row, pc = 0;
    for (var i = 0, ilen =  hot.countRows(); i < ilen; i++)
    {
      row = [];
      for (var ii = 0; ii<hot.countCols(); ii++)
      {
        hot.setCellMeta(i,ii,'id',res[pc].id);
        row[ii] =   res[pc].price;
        if(pc < (res.length-1)) {

        pc++;
        }
      }
      data[i] = row;
    }
    hot.loadData(data);
  }
});

var test = this.getCellMeta(0,0); // is working, return "id" meta
console.log(test);

我在afterChange之后尝试了输出控制台日志;
javascript - 如何在Handsontable的afterChange中使用getCellMeta?-LMLPHP

在afterChange中使用输出控制台日志;
javascript - 如何在Handsontable的afterChange中使用getCellMeta?-LMLPHP

更改后如何获取细胞元?

谢谢。

最佳答案

您快要准备好了,回调中只有一个小错误:doc for afterChange 指定回调的第一个参数(changes)是:



因此,有2个重要的细节:

  • 要获取受影响单元格的行/列的“元”(假设只有一个),您需要调用hot.getCellMeta(change[0][0],change[0][1])例如
  • hot上,而不在this上,因为afterChange回调函数是从不同的上下文(即在不同的对象上)调用的,因此this不是该调用的正确目标,请参阅How does the "this" keyword work?

  • 读取更改的整个数组的示例:
    var hot = new Handsontable(container, {
      /* rest of init... */
      afterChange : function(changes,source) {
          console.log("Changes:", changes, source);
          if (changes) {
              changes.forEach(function(change) {
                  var test = hot.getCellMeta(change[0],change[1]);
                  console.log(test.id, test); // 'id' is the property you've added earlier with setMeta
              });
          }
      }
    });
    

    请参阅demo fiddle,打开JS控制台,在表中进行任何更改。

    关于javascript - 如何在Handsontable的afterChange中使用getCellMeta?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47965692/

    10-11 23:18