Handsontable,colWidths:function:如何设置列宽适合内容?

时间:2017-07-15 22:15:30

标签: javascript css handsontable

我的目标是将第一列的宽度设置为等于某个数字,并留下其他列。宽度未受影响。现在我知道那个设置

colWidths: [myValue]

实际上打破了其他列'宽度,但这似乎是使用

可以解决的
colWidths: function(index) {
    if(index == 0)
        return myValue;
    return ???
}

但我想知道我应该在???的地方返回什么? undefined不起作用(好吧,它的工作方式与colWidths: [myValue]相同 - 每个其他列都获得相同的默认宽度)。如何按内容获得"宽度"这个价值?

3 个答案:

答案 0 :(得分:3)

为了以防万一,我会发布另一种我发现的方法(在GitHub上发布):

使用var autoColumnSize = handsontableInstance.getPlugin('autoColumnSize');autoColumnSize.calculateColumnsWidth(index, 0, true); - 这一行计算行index中列0的必要宽度,使用Math.max是另一种选择。这是一个实现 - 没有遍历所有行并寻找最大值,而是原则证明:http://jsfiddle.net/7u1kxjLe/39/

答案 1 :(得分:1)

使用选项 manualColumnResize 而不是 colWidths ,但方法与问题相同(仅定义第一列witdh):

manualColumnResize: [myValue]

第一列宽度将定义为您的值,其他列仍将是动态的。 (默认情况下, autoColumnSizeObject 设置为 true ,当您使用 colWidths 选项时,也会更改为 false

您可以找到一个有效的例子here

答案 2 :(得分:1)

我当前正在使用

modifyColWidth: function(width, col){
  if(width > 300) return 300;
}

按列号引用也可以。

modifyColWidth: function(width, col){
  if(col === 0) return 300;
}

编辑:HandsOnTable实例化后,您还需要此设置,否则您不能将宽度设置为超过300px。

colWidths = [];
[...Array(hot.countCols()).keys()].map(i => {
  colWidths.push(hot.getColWidth(i));
});

hot.updateSettings({
  modifyColWidth: ()=>{},
  colWidths: colWidths
});