Header 使用复选框列筛选和选择行,返回所有行

Header filtering and selecting rows with checkbox column giving back all rows

我有点困惑为什么我在使用 header 过滤时 table.getSelectedData() 时总是得到完整的行列表。我有一个包含 16 行的 table。我 header 过滤电子邮件地址并获得 3 行。然后,我选中 header 中的 select 全部复选框,并使用按钮单击事件来记录 selected 的内容。无论我使用“active”、“visible”还是什么都不用,我总是得到 16 行。

我试过了

cell.getRow().toggleSelect("active");
cell.getRow().toggleSelect("visible");
cell.getRow().toggleSelect();

以及

table.getSelectedData("active");
table.getSelectedData("visible");
table.getSelectedData();

Table初始化如下:

var table = new Tabulator("#rules-table", {
    height: 600, 
    data:tabledata,  
    layout:"fitColumns",
    persistentSort:true,
    selectable:true,
    selectablePersistence:false,
    pagination:"local", 
    movableColumns: true,  
    columns:[  
        {title:"UUID",        field:"uuid",        headerFilter:"input", frozen:true, width:300},
        {title:"Type",        field:"type",        headerFilter:"input", width:100},
        {title:"SubType",     field:"subtype",     headerFilter:"input", width:100},
        {title:"AssetUUID",   field:"asset_uuid",  headerFilter:"input", width:300},
        {title:"Info",        field:"info",        headerFilter:"input"},
        {title:"Owner",       field:"owner",       headerFilter:"input", width:200},
        {formatter:"rowSelection", titleFormatter:"rowSelection", align:"center", width:20, headerSort:false, cellClick:function(e, cell){
                cell.getRow().toggleSelect("active");
        }},
        {formatter:printIcon, width:0, align:"center", width:26, headerSort:false, cellClick:function(e, cell){generate_assets_options_menu(e, cell)}}
            
    ],
});

所以为了描述更多一点,然后我做了一些 header 过滤以减少行,select 我想要的行,并使用按钮来获得 selected数据库删除操作的行。如果我手动 select 特定行,一切正常。

然而,当我使用 header 过滤器减少并单击 header 复选框以 select 所有可见行(假设过滤后有 3 行)时,当我打印出什么已经 selected 我总是得到一切,即 16 行。

删除按钮点击事件如下:

var selectedData = table.getSelectedData("active");
var selectedRows = table.getSelectedRows("active");
    
console.log(selectedData);
console.log(selectedRows);

getSelectedData函数returns所有选中的行,不管它们当前是否被过滤。

默认情况下,过滤掉的选定行保持选中状态,当移除过滤器并且该行重新出现时,它仍将处于选中状态。

如果您只想查看已过滤和选中的行,我建议您使用 getRows 函数获取活动行组件的数组。然后在数组上使用过滤函数来获取过滤后的选定行:

var rows = table.getRows("active");

var selectedRows = rows.filter(function(row){
    return row.isSelected();
});

所以我的最终解决方案(在这种情况下检索一组 uuid)已使用 header 过滤过滤,然后使用 "check all" 复选框选择如下

    var rule_uuids = [];
    var rows = table.getRows("active");

    var selectedRows = rows.filter(function(row){
        return row.isSelected();
    });

    selectedRows.forEach(function (item) {                          
        rule_uuids.push(item._row.data.uuid);               
    });

再次感谢奥利