我对JavaScript相当陌生,目前正在学习如何与Tabulator一起使用(除此问题外,它的功能还不错)。
我想向每个列标题添加一个菜单按钮,然后打开一个下拉菜单。从该菜单中,用户应该能够选择“分组依据”,然后使用选定的列来获得表分组数据。
有问题的按钮将是:
<div class="ui icon top left pointing dropdown button" id=dropdown>
<i class="bars icon"></i>
<div class="menu">
<div class="header">Options</div>
<div class="item">Test</div>
</div>
</div>
看起来像这样:
这是我当前的columnData:
var table = new Tabulator("#example-table",{
data:tabledata,
layout:"fitColumns",
locale:true,
movableColumns:true,
resizableColumns:false,
columns:[
{title:"Name", field:"name", headerFilter:"input"},
{title:"Age", field:"age", align:"right", sorter:"number", headerFilter:"number", /* bottomCalc:"sum" */},
{title:"Favorite Color", field:"col", headerFilter:"input"},
{title:"Date of Birth", field:"dob", sorter:"date", align:"center", headerFilter:"input", headerContext:function(e, column){
table.setGroupBy(column.getField());
e.preventDefault();
},
},
{title:"Nationality", field:"nationality", headerFilter:"input", headerContext:function(e, column){
table.setGroupBy(column.getField());
e.preventDefault();
},
},
],
langs:{
"de-de":{
"headerFilters":{
"default":"Spalte filtern...",
}
}
},
});
答案 0 :(得分:2)
您应该使用 titleFormatter 进行此操作,尝试从表外部操作制表器内部的元素非常危险,因为制表器使用虚拟DOM元素可以替换恕不另行通知,从而导致与插件的任何绑定都将丢失。
在同一页面上具有多个具有相同ID的元素也是一种不好的做法,上述解决方案就是这种情况。元素ID在页面上应该是唯一的
在这种情况下,标题格式设置将如下所示:
var menuTitleFormatter = function(cell, formatterParams, onRendered){
//build dropdown
var dropdown = document.createElement("div");
dropdown.classList.add("dropdown");
dropdown.classList.add("ui");
dropdown.innerHTML = "<i class='bars icon'></i><div class='menu'><div class='header'>Options</div><div class='item' class='sort1'>Sort</div><div class='item' class='group1'>Group</div></div>";
//create dropdown
$(dropdown).dropdown();
$('.group1', $(dropdown)).click(function(){
//do something when the item is clicked
});
//set header title
var title = document.createElement("span");
title.innerHTML = cell.getValue();
//add menu to title
title.appendChild(dropdown);
return title;
}
您可以将其应用于其定义中的列
{title:"Name", field:"name", titleFormatter:menuTitleFormatter },