Javascript 检索已排序的handsontable实例中的隐藏标头

Javascript 检索已排序的handsontable实例中的隐藏标头,javascript,handsontable,Javascript,Handsontable,使用时,似乎很难从上下文菜单中检索行的标题 考虑以下数据源: var data = function () { return [["1212", "roman", "i", "ii", "iii"], ["3121", "numeric", 1, 2 ,3], ["4126", "alpha", 'a', 'b', 'c']]; }; 可以创建一个Handsontable实例,该实例显示除前两列之外的所有数据,并具有如下上下文菜单: // Settings

使用时,似乎很难从上下文菜单中检索行的标题

考虑以下数据源:

var data = function () {
 return [["1212", "roman", "i", "ii", "iii"],
         ["3121", "numeric", 1, 2 ,3],
         ["4126", "alpha", 'a', 'b', 'c']];
};
可以创建一个Handsontable实例,该实例显示除前两列之外的所有数据,并具有如下上下文菜单:

// Settings to display all columns but the first two
var dataCols = []
for(var i=2; i<data()[0].length; i++) {
  dataCols.push({ data: i })
}

// Instance creation
var hot = new Handsontable(container, {
  data: data(),
  height: 396,
  colHeaders: true,
  rowHeaders: false,
  columns: dataCols,
  stretchH: 'all',
  columnSorting: true,
  contextMenu: {
    callback: function(key, options) {
      switch(key) {
      case 'header_pls':
        // TODO retrieve the "hidden header" from here    
        break;
      }
    },
    items: {
      "header_pls": {
        name: "Header please?"
      }
    }
  },
});
//显示除前两列以外的所有列的设置
var dataCols=[]

对于(var i=2;i我发现可以使用自定义渲染器隐藏单元格

function customRenderer(instance, td, row, col) {
    Handsontable.renderers.TextRenderer.apply(this, arguments);
    if([0, 1].indexOf(col) > -1) {
      td.style.display =  "none";
    }
    return td;
}
使用此选项,您可以使用getDataAtCell获取隐藏列的数据,因为您使用显示表中的原始数据源。 以下是更新的小提琴:


但是,关于列标题还有另一个问题…

我认为您的问题归结为如何在排序后获得真实(物理)索引。如果我错了,请纠正我,因为这个答案围绕着这个问题

以下是您需要知道的:当您使用内置分类器时,Handson实际上不会对您的数据数组进行排序。这是一种默认行为,可能对您有用,也可能对您没有用处。无论如何,从这一点开始,每个内部方法都使用所谓的“逻辑索引”内部方法在尝试访问数据点时使用从逻辑索引到物理索引的转换

在您的情况下,您希望在给定逻辑索引的情况下检索物理索引,以便正确访问数据。这可以使用一个简单的函数完成:

physicalIndex = instance.sortIndex[logicalIndex][0];
根据这些信息,您应该能够添加一些逻辑,以便无论何时尝试访问数据,都只需确保使用此转换的物理索引;在我的例子中,我只需检查
instance.sortIndex
是否未定义(我认为在排序之前就是这种情况)每隔一段时间只分配这个索引,因为即使没有排序,
logicalIndex==physicalIndex


希望有帮助!

谢谢你的帮助。如果标题没有问题,这就可以了。在我的“现实生活”项目中,每一列的宽度都不一样(我使用自定义标题).我敢肯定这会把整个工作表搞砸!是的,这有点像,你必须使用逻辑索引完全符合我的需要,谢谢。这是一个给对解决方案工作感兴趣的人的建议。