简体   繁体   English

如何以编程方式删除 Tabulator 表中的自定义操作按钮?

[英]How do I programmatically remove a custom action button in a Tabulator table?

I created a Tabulator table which has a custom action button to execute an action and then updates the row on which the button was clicked.我创建了一个 Tabulator 表,它有一个自定义操作按钮来执行一个操作,然后更新单击该按钮的行。 This it does successfully.它成功地做到了这一点。

What I want to do is to also dynamically remove the row's link/buttonthat was clicked - only for the row whose button was clicked - as soon as the row data is updated.我想要做的是还动态删除被点击的行的链接/按钮 - 仅针对其按钮被点击的行 - 一旦行数据更新。 I've tried to resolve this for hours and checked the tabulator documentation, and I still don't know how I can go about doing this.我已经尝试解决这个问题几个小时并检查了制表器文档,但我仍然不知道如何去做。

Your help is much appreciated.非常感谢您的帮助。

The code is as follows:代码如下:

var tableData =[
   {
      "id":30,
      "position":201,
      "category":"onel",
      "name":"One Thing",
      "completed_at":null,
      "created_by_email":"",
      "completed_by":""
   },
   {
      "id":31,
      "position":202,
      "category":"onel",
      "name":"Two things",
      "completed_at":null,
      "created_by_email":"",
      "completed_by":""
   },
   {
      "id":32,
      "position":203,
      "category":"onel",
      "name":"Three things",
      "completed_at":null,
      "created_by_email":"",
      "completed_by":""
   },
   {
      "id":33,
      "position":204,
      "category":"onel",
      "name":"Four things",
      "completed_at":null,
      "created_by_email":"",
      "completed_by":""
   },
   {
      "id":34,
      "position":205,
      "category":"onel",
      "name":"Five things",
      "completed_at":null,
      "created_by_email":"",
      "completed_by":""
   }
];
var actButton = (cell, params, onRendered) => {                        
    var myId = cell.getRow().getData().id;
    clickFunction = (p_id) => {  
        cell.getTable().updateData(
          [
            { id: p_id
             , completed_at: '2021-12-31 13:59:00'
             , completed_by: 'Womble'
             , completed_by_email: 'wimbledon@common.org.uk'
            }
          ] 
          // <--- here, I want to remove this row's action button as defined below
        );
    };
    /**
     * This renders the buttons at initialisation but doesn't respond to dynamic in-situ data-changes
     */
    if ( null == cell.getRow().getData().completed_at ) {
        return "<a href='javascript: clickFunction(" + myId + ")' data-toggle='tooltip' title='Execute'><i class='fas fa-camera' style='color:#9691ce;'></i></a>";
    } else {
        return "";
    }                
};
var myTable = new Tabulator(
    "#divTable",
    {
        data: tableData,
        columns: [
            {title:"Position", field:"position"},
            {title:"Category", field:"category"},                    
            {title:"Name", field:"name"},
            {title:"Completed", field:"completed_at", formatter:"datetime", formatterParams:{inputFormat:"YYYY_MM_DD HH:mm:ss", outputFormat:"DD/MM/YYYY HH:mm:ss", invalidPlaceholder:""} },
            {title:"By", field:"completed_by", sorter:"string"},
            {title:"Email", field:"completed_by_email", sorter:"string"},
            {title:"Action", field:"id", sortable:false, formatter:actButton},
        ],
        layout: "fitColumns",
        pagination: "local",
        paginationSize: "15",
        tooltips:true,
        tooltipsHeader:true,
        reactiveData:true, //turn on data reactivity
    }
);

I was looking to the Tabulator component object model for the solution, when it was best answered by the DOM.我正在寻找解决方案的 Tabulator 组件对象模型,当它最好由 DOM 回答时。

Assumptions:假设:

  • the action button column is assigned the field 'id' - this doesn't affect the dynamic table's layout or interaction操作按钮列被分配了字段“id”——这不会影响动态表的布局或交互

Using a fragment of the above code as a starting point, the solution would be:使用上述代码的片段作为起点,解决方案是:

var actButton = (cell, params, onRendered) => {                        
    var myId = cell.getRow().getData().id;
    clickFunction = (p_id) => {  
        cell.getTable().updateData(
          [
            { id: p_id
             , completed_at: '2021-12-31 13:59:00'
             , completed_by: 'Womble'
             , completed_by_email: 'wimbledon@common.org.uk'
            }
          ]
        ).then (
          () => {
             /**
              * Remove the action button
              */
            [...document.querySelectorAll("div.tabulator-cell")]
                .filter(item => item.getAttribute('title')==p_eventId)[0]
                    .childNodes[0].remove();
          }
        );
    };
    /**
     * This renders the buttons at initialisation but doesn't respond to dynamic in-situ data-changes
     */
    if ( null == cell.getRow().getData().completed_at ) {
        return "<a href='javascript: clickFunction(" + myId + ")' data-toggle='tooltip' title='Execute'><i class='fas fa-camera' style='color:#9691ce;'></i></a>";
    } else {
        return "";
    }                
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM