【问题标题】:How to select all in primefaces dataTable with liveScroll如何使用 liveScroll 在 primefaces dataTable 中选择所有内容
【发布时间】:2016-12-28 20:33:53
【问题描述】:

我正在使用 primefaces v5.3 dataTable 与 liveScroll="true" 和 selectionMode="multiple"。 标题复选框仅选择可见行,当我向下滚动时,新行显示为未选中。 我希望标题复选框选择所有行:可见和不可见。 只选择可见行是没有意义和无用的。 有办法解决吗?

我尝试通过处理“toggleSelect、rowSelectCheckbox 和 rowUnselectCheckbox”事件将所有表格数据添加到选择中。它适用于后端,但在 UI 中的行无论如何都未选中。

【问题讨论】:

  • “只选择可见行是没有意义和无用的。是否可以修复?” 可能适合您的用例。在过去的 5 年里,我从未听说过这个要求。这是一个危险的要求。最终用户可能不会想到这一点(我不会)并且对许多行采取行动。由于这是一个不常见的要求,我怀疑是否有一个简单的解决方法。下载组件的源代码,检查并查看是否可以“修复”某些东西,这是我唯一能想到的。

标签: primefaces datatable


【解决方案1】:

使用此脚本替换primefaces原有的updateData函数

PrimeFaces.widget.DataTable.prototype.updateData = (function() {

    var cached_function = PrimeFaces.widget.DataTable.prototype.updateData;
    return function() {
        var reselectAll = (this.selection != undefined && (this.selection[0] === '@all' || this.selection.length === this.getTbody()[0].getElementsByTagName('tr').length);
        var result = cached_function.apply(this, arguments);
        if (reselectAll) {
            this.selectAllRows();
        }
        return result;
    };
})();

这将自动选择表上新加载的行(仅在客户端可见的行)

【讨论】:

  • 我把这个脚本和我的数据表一起放在 xhtml 中。但变量表未定义,this.selection 没有@all 值,只有数字 801、802、... 819、...
  • 已修复。此外,如果您使用表的方法 selectAllRows() 选择所有行,则选择将具有值“@all”。
  • 现在它可以部分工作了。但我不明白条件“|| this.selection.length === this.getTbody()[0].getElementsByTagName('tr').length”。至于我,它是不必要的,或者可能是 "|| ... === " 应该替换为 "&& ... !=" ?而且我不明白我应该如何调用'selectAllRows();'第一次将“@all”放到选择中..
  • this.selection 有两个可能的值,这意味着该表已选择所有记录,['@all'][**an array with the ids of all selected rows**],该条件验证其中任何一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
相关资源
最近更新 更多