Primefaces(5.1) - 通过移动剩余列来调整列的大小

时间:2014-11-13 15:43:51

标签: primefaces

Primefaces,版本5.1。 请注意,是否有可能在不减小下一列宽度的情况下更改列宽,但可以通过移动其余列来实现。

说明:

  1. 有可撤销的列。

  2. 在调整第一列的大小时 - 第二列的宽度发生变化。

  3. 但是,需要移动其他列而不减小第二列的宽度(第二列和其他列的宽度不会改变,并且在增加列的宽度后也应该显示滚动)。

  4. 如果您知道如何解决此问题,请提供帮助

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。据我所研究,问题的根源在PrimeFaces的source datatable.js第2123行(here)中的方法“resize()”。

如果您查看PrimeFaces Showcase,可调整大小的列(datatable - resize),您将能够获得此方法,例如:带有PrimeFaces.widgets.widget_form_cars2.resize;

的Chrome浏览器控制台

有了这些知识,我们可以尝试用我们自己的调整大小替换此方法,这不会改变nextColumnHeadernextColumnnextColumnFooter

例如,在(PrimeFaces Showcase page)上执行以下代码并使用第二个表格。

PrimeFaces.widgets.widget_form_cars2.resize = function(event, ui) {
  var columnHeader;
  var change = null;
  var newWidth = null;

  if (this.hasColumnGroup) {
    var groupResizer = this.findGroupResizer(ui);
    columnHeader = groupResizer.parent();
  } else {
    columnHeader = ui.helper.parent();
  }

  if (this.cfg.liveResize) {
    change = columnHeader.outerWidth() - (event.pageX - columnHeader.offset().left);
    newWidth = (columnHeader.width() - change);
  } else {
    change = (ui.position.left - ui.originalPosition.left);
    newWidth = (columnHeader.width() + change);
  }

  if (newWidth > 15) {
    columnHeader.width(newWidth);
    var colIndex = columnHeader.index();

    if (this.cfg.scrollable) {
      this.theadClone
        .find(PrimeFaces.escapeClientId(columnHeader.attr('id') + '_clone'))
        .width(newWidth);
      if (this.footerCols.length > 0) {
        var footerCol = this.footerCols.eq(colIndex);
        footerCol.width(newWidth);
      }
    }
  }
}