【问题标题】:Add borders around a flexible handsontable在灵活的手摇桌周围添加边框
【发布时间】:2017-06-13 02:08:27
【问题描述】:

我想从 1 个单元格开始制作一个动手操作。然后我们可以通过上下文菜单添加/删除行/列,甚至可以从 Excel 文件中复制粘贴数据。我将最大尺寸固定为104 x 66。所以如果有很多数据,handsontable就会滚动。

现在,我想在表格周围添加边框,适用于所有情况:1)当表格没有达到其最大尺寸时,边框应该正好在单元格周围; 2)当表格达到最大尺寸时,边框应该在最大尺寸附近。我做了这个JSBin,它满足第二种情况,但不是第一种:

<!DOCTYPE html>
<html>
<head>
  <script src="https://docs.handsontable.com/pro/1.9.1/bower_components/handsontable-pro/dist/handsontable.full.min.js"></script>
  <link type="text/css" rel="stylesheet" href="https://docs.handsontable.com/pro/1.9.1/bower_components/handsontable-pro/dist/handsontable.full.min.css">
  <style>
    .handsontable { border: 1px solid red; }
  </style>
</head>
<body>
  <div id="example4" class="hot head-gap handsontable htRowHeaders htColumnHeaders"></div>
</body>
</html>

JavaScript:

document.addEventListener("DOMContentLoaded", function() {
  function getData() {
    return [
      [""]
    ];
  }

  var
    example4 = document.getElementById('example4'),
    hot4;

  hot4 = new Handsontable(example4, {
    data: getData(),
    width: 104,
    height: 66,
    colWidths: 47,
    rowHeights: 23,
    rowHeaders: false,
    colHeaders: false,
    contextMenu: true,
    contextMenuCopyPaste: {
      swfPath: '/bower_components/zeroclipboard/dist/ZeroClipboard.swf'
    }
  });
});

有人有解决办法吗?

编辑 1: 遵循 Serg Chernata 的回答:

编辑 2: 按照 fap 的回答,我看到两个问题:

1) 红色边框甚至在上下文菜单周围:

2) 红色边框在数据的蓝色边框之外:

【问题讨论】:

  • 您似乎没有修复表格的最大尺寸,而是修复了它的尺寸,所以它始终是104 x 66 .所以你的桌子不会到达任何东西,因为它不会改变它的尺寸。因此,在某些特定场景中应用边框的条件似乎无关紧要。
  • 该表可能包含许多数据,例如,当我从 Excel 文件中复制粘贴一个大表时。我想为这种情况设置一个滚动限制布局。
  • 你玩过媒体查询来解决这个问题吗?
  • @robjez 我没有...我担心媒体查询会使问题复杂化,我想知道我们是否可以在 hansontable 的配置中实现这一点...

标签: css handsontable


【解决方案1】:

假设我正确理解了您的要求,我们或许可以用一点 css 来做到这一点:

#example4{
  max-width: 104px;
  max-height: 66px;
  display: inline-block;
}

注意,我从您的 dandsontable 配置中删除了宽度和高度。通过这种方式,我们可以将内容扩展到某个定义的max-width 和max-height。

http://jsbin.com/qehexiyidu/edit?html,css,js,output

【讨论】:

  • 我的错,删除溢出:滚动。我更新了我的例子。我不确定你想如何处理滚动。 jsbin.com/qehexiyidu/edit?html,css,js,output
  • 当表格有很多单元格时,我确实想继续滚动。这就是我固定最大尺寸的原因。您的示例不允许滚动...
【解决方案2】:

我相信,我有一个解决方案可以通过使用 after create/remove col/row 事件来满足您的所有要求,但它并不完美。

我所做的是在其中一个事件之后动态更改表格的宽度和高度,例如:

hot4.addHook('afterCreateCol', function() {
  setTable();
});

如果其中一个或两个值超过限制,它们将保持在此限制。 (在您的示例中为 104 x 66)

所以主要功能是:

function setTable() {
  if(hot4.getColWidth()*hot4.countCols()<208)
    hot4.updateSettings({
      width: hot4.getColWidth()*hot4.countCols()
    });
  else
    hot4.updateSettings({
      width: 208
    });

  if(hot4.getRowHeight()*hot4.countRows()<132)
    hot4.updateSettings({
      height: hot4.getRowHeight()*hot4.countRows()
    });
  else
    hot4.updateSettings({
      height: 132
    });
}

(我的眼睛用的是 208 x 132..)

注意我是在创建表之后加载数据来触发事件afterLoadData。

唯一剩下的“问题”(我说它并不完美..)将是滚动条。我不知道为什么,但即使数据适合,滚动条也会出现在限制之下。 It's supposed to be fixed,但显然不是......(如果你能解决这个问题,我很感兴趣)

无论如何,我认为从这个解决方案开始,你可能会成功地达到你想要的,所以我决定与你分享它的当前状态。您可以在 JSBin 中找到一个工作示例。


编辑 1:“滚动条问题”的屏幕截图

即使 2x2 单元格适合表格,滚动条仍然存在。

【讨论】:

  • 我不明白您所说的“即使数据适合,滚动条也存在于限制之下”是什么意思,请参阅我的更新...
  • 使用 chrome 你会明白我的意思,这在 Firefox 上确实不同。另外,是的,我之前没有注意到上下文菜单的边框,但它也出现在您问题的示例中。不知道我怎么想念那个
  • 好吧,你可以看到我的编辑,这就是我在 Chrome 中的内容,但在 Firefox 中我和你有同样的东西(编辑 2:问题的截图)
【解决方案3】:

我添加了一些东西并发布在JSBin。我已添加 css 并将 jquery 包含到您的原始 html 中以进行与 dom 相关的查询。请让我知道它是否有帮助。这是JS代码。

document.addEventListener("DOMContentLoaded", function() {
function getData() {
return [
  [""]
];
}

var
example4 = document.getElementById('example4'),
hot4;

hot4 = new Handsontable(example4, {
data: getData(),
width: 104,
height: 66,
colWidths: 47,
rowHeights: 23,
rowHeaders: false,
colHeaders: false,
contextMenu: true,
contextMenuCopyPaste: {
  swfPath: '/bower_components/zeroclipboard/dist/ZeroClipboard.swf'
},
afterRender: function() {
  var item = $('.ht_master.handsontable .wtHolder')[0];
if (item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth) {
    $('.handsontable').css('border', '1px solid red');
    $(item).find('.htCore').css('border', '0px none white');
} else {
    $(item).find('.htCore').css('border', '1px solid red');
}


}
});
});

【讨论】:

  • 是不是你不希望上下文菜单有边框?
  • 然后你可以从html中删除style元素。你想要一个更新的 JS Bin 吗?更新了 JS Bin。
  • 不错...这个解决方案最接近我想要的。
  • 如果这不能回答您的问题并且还需要其他任何内容,请告诉我。
猜你喜欢
  • 2012-10-05
  • 2014-09-12
  • 2014-01-09
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多