从格式化程序中触发功能? (responsiveLayout: collapse > toggleList)

Trigger function from within formatter? (responsiveLayout: collapse > toggleList)

有没有办法从 rowFormatter 中触发函数?我正在使用 responsiveLayout: "collapse"-选项,我真的很喜欢它。

但是,我想触发 toggleList 函数(或者它叫什么.... 来自 '19)

我不想.click()的路,所以我在rowClick:

                    let isOpen = row._row.modules.responsiveLayout.open;
                    var collapseEl = row._row.element.querySelector('div.tabulator-responsive-collapse');

                    if (!(isOpen)) {
                        collapseEl.classList.add("open");
                        if (collapseEl) {
                            collapseEl.style.display = '';
                        }
                    } else {
                        collapseEl.classList.remove("open");
                        if (collapseEl) {
                            collapseEl.style.display = 'none';
                        }
                    }
                    row._row.modules.responsiveLayout.open = !(isOpen);

但是...必须有一个好的方法来触发 toggleList(),而不是编写一个抄袭函数,它做同样的事情...

我试图查看 row._row 中的值和函数,但没有成功。我 99.7% 确定我错过了文档中的这一部分........但我真的尽力搜索了。

TL;DR:我想在我的 rowClick() 事件函数中触发格式化程序中定义的 toggleList() 函数。这可能吗?

Tabulator 中没有内置 toggleList 功能。

在您引用的示例中,它只是一个名为 toggleList 的函数,该函数在行格式化程序内部定义,并在单击格式化行添加的元素时触发。

因为 toggleClick 函数是在行格式化程序内部定义的,所以它的范围仅限于该格式化程序函数,因此无法从外部访问它。

解决此问题的一种方法是将函数分配给行数据对象上的 属性,然后您可以从 table.

中的其他位置访问它

因此,如果我们以您提供的 link 为例,并在 customResponsiveCollapseFormatter 函数的顶部添加以下内容:

var data = cell.getData(); //retrieve the row data object

当我们定义 toggleList 函数时,我们可以将它分配给数据对象上的 属性 而不是简单的函数定义,让我们称之为 collapseToggle,我们还将对其进行调整,使其不需要传入的 isOpen 属性 并直接翻转打开变量本身的状态,这样就可以了可以在不知道当前状态的情况下从格式化程序之外的任何地方调用:

data.collapseToggle = function toggleList(){
    open = !open;

然后在我们的 cellClick 函数中,我们可以检查 collapseToggle 属性 是否定义在行数据然后调用它:

cellClick:function(e, cell){
    var data = cell.getData();

    if(data.collapseToggle){
        data.collapseToggle();
    }
}