VirtualDOM缓冲区行中的JQuery

时间:2019-01-07 21:54:08

标签: tabulator

我希望在row.isSelected()中用奇偶校验检查表中的一列复选框。

使用VirtualDOM时,不会在表中检查/取消选中缓冲区中的行。getRows()循环可取消选中该框。通过row.deselect()从表POV中取消选择行。

该复选框的第一列中添加了一个变量:

i = df.loc[:,df.columns[df.iloc[0]]].filter(like='value').columns.str.split('.').str[-1].astype(int).tolist()

my_dict = {1: ('a', 'category'),2: ('b', 'category'),\
           3: ('c', 'category'),4:('d','category'),\
           5:('e','subcategory'),6:('f','subcategory'),\
           7:('g','subcategory'),8:('h','subcategory'),\
           9:('i','subcategory'),10:('j','subcategory'),\
           11:('k','subcategor'),12:('l','subcategory'),\
           13:('m','subcategory'),14:('n','subcategory'),\
           15:('o','subcategory'),16:('p','subcategory'),\
           17:('q','subcategory'),18:('r','subcategory'),\
           19:('s','subcategory'),20:('t','subcategory'),\
           21:('u','subcategory'),22:('v','subcategory'),\
           23:('w','subcategory'),24:('x','subcategory')}

df1 = pd.DataFrame.from_dict(my_dict, orient='index')

df_out = df1.loc[i].set_index(1).T

print(df_out)

全选逻辑:

1 category subcategory
0        a           f

可以通过在rowFormatter中添加一些逻辑以在首次渲染时对其进行检查来检查DOM中根本不存在的行。

可能无法修复,但我认为值得一问。

1 个答案:

答案 0 :(得分:1)

因为Tabulator使用虚拟DOM,只有可见的行实际上存在,所以滚动时会创建和销毁行。

因此,从外部尝试并操纵表中的任何DOM元素都是不安全的。

根据您的情况,您应该使用Custom Formatter,该行在行组件上使用 isSelected 函数来确定是否应选中该复选框已创建。

//custom formatter
function checkboxFormatter(cell, formatterParams, onRendered){

    //create input element
    var input = document.createElement("input");
    input.setAttribute("type", "checkbox");


    //set checked state
    input.checked = cell.getRow().isSelected();

    return input;
}

//assign formatter in column definition
{title:"selected?", formatter:checkboxFormatter}

然后,您应该使用 rowSelectionChanged 选项在选择更改后重新绘制行,这将使格式化程序运行并更新复选框。

rowSelectionChanged:function(data, rows){
    //rows - array of row components for the selected rows in order of selection
    //data - array of data objects for the selected rows in order of selection

    //reformat all rows that have changed
    rows.forEach(function(row){
        row.reformat();
    })
}

然后,您可以通过调用表上的 selectRow 函数来选择表中的所有行。

table.selectRow();