当前位置: 首页 > 知识库问答 >
问题:

基于数据属性有条件地隐藏数据表列

常乐
2023-03-14

我有以下问题:

我想有条件地显示datatable中的一列。特别是kt数据表中的actions列。(Laravel的Metronic主题有自己的Datatables实现,它基于jQuery Datatables。)我一直在看专栏。渲染方法,但我不能完全理解它。理想情况下,我希望根据与datatable的html一起传递的数据属性显示一列。

HTML:

<div id="datatable-example" data-isadmin="{{ auth()->user()->hasRole(['superadmin', 'admin']) }}"></div>

js/jquery:

example_datatable = example_element.DataTable({
        search: {
            input: $('#generalSearch'),
        },
        rows: {
            ...
        },
        columns: [
            ...,
            {
                field: 'actions',
                title: sendings_element.data('column-actions'),
                class: 'w8',
                textAlign: 'right',
                sortable: false,
                template: function (row) {
                    if (sendings_element.data('user_roles')) {
                        return '<a class="btn btn-danger" href="' + sendings_element.data('route-edit-sending').replace('__id__', row.id) + '">' + sendings_element.data('text_edit') + '</a>';
                    } else {
                        return '<a class="btn btn-danger" href="' + sendings_element.data('route-view-sending').replace('__id__', row.id) + '">' + sendings_element.data('text_view') + '</a>';
                    }
                }
            },
        ],
    });

我真的很感激你的帮助。

更新:

我找到了一个可行的解决方案:

<div id="datatable-id"
         ...
         data-isadmin="{{ auth()->user()->hasRole('super-admin') ? "true"  : "false" }}" 
    ></div>

在我的javascript中:

 kb_datatable = kb_element.customDataTableThatExtendsKTDatatable({      
        ...    
        columns: [          
           ...
            {
                field: 'description',
                title: kb_element.data('column-description'),
                width: 600,
                template: function(row) {
                    if(kb_element.data('isadmin')){                     
                        kb_datatable.column(1).visible(false);
                    }
                },
            },           
            ...

            },
        ],
    });

我还不满意这个解决方案,因为我正在使用一个行模板来隐藏列。但它现在起作用了。

@remul:是的,我正在使用KT-Datable,我不确定报告这个问题的同事是否在他的代码中。好接球!我刚刚设置了一个测试用例,使用一个自定义的数据可扩展ktdatable。我已经接受了你的答案作为解决方案,因为你给我指出了正确的方向,但问题是可见属性期望一个真或假,因此在html代码中缩短。理想情况下,我想为列的回调函数,但我能找到的唯一有点像它的是模板方法。此外,如果我在列对象中的可见属性上使用缩写的结果,我遇到了一个奇怪的错误,我需要将其他列设置为空,并且不能为其他列设置其他属性。使用带目标和可见的哥伦布是另一种解决方案,但我也不能做到这一点。

共有1个答案

伍昱
2023-03-14

可见属性添加到操作列应该可以做到这一点,但是当使用stateSave时,只要有一个可数据对象的保存状态,更改data-属性就不会有任何效果。为了避免这种情况,您可以从状态中删除可见性,除非在这里提到:

如果您不想保存列可见性,您可以从状态对象中的对象列数组中删除可见参数:

stateSaveParams: function ( settings, data ) {
  for ( var i=0, ien=data.columns.length ; i<ien ; i++ ) {
    delete data.columns[i].visible;
  }
}

所以在你的情况下:

columns: [
    {
        field: 'actions',
        visible: !!example_element.data('isadmin')
        // your other attributes
    },
],
stateSaveParams: function ( settings, data ) {
    for ( var i=0, ien=data.columns.length ; i<ien ; i++ ) {
        delete data.columns[i].visible;
    }
}
 类似资料:
  • 因此,我试图编写一个油腻的脚本,并希望基于同一树中的span值来切换一个特定的div类。这将绑定到一个按钮操作。 我想出的最好的办法是... $('span[data-doc=“true”]').parent().parent().parent().parent().parent().parent().parent().parent().toggle(); 为了向上到达树并隐藏我想要的div类,我

  • data.table,我们可以根据行号或条件选择行: 但是,我不能同时选择行数和条件: 这可能是因为在这种格式下没有被解释为行号。我知道我可以链接这两个条件: 但是我想为这个子集分配新的列值 现在,它只为中间链接的 data.table 创建了列。我可以保存中间表,然后合并回原始表,但那会很麻烦。 实际上,我经常觉得 需要一个正确的行号。一个依赖于组的动态数字,但我想要一个可以识别每一行的唯一ID

  • 问题内容: 我正在为指令模板。如果范围内的属性设置为true,则应将其附加到元素。如果变量为false,则此数据属性不应呈现为元素的属性。 例如,如果scope变量为true,则模板应呈现: 如果为false,则模板应呈现: 模板将如何完成此任务? 例如,我知道可以用来有条件地包含一个类。如果我希望模板呈现此内容: 然后我的模板如下所示: 如果scope变量为,则模板将简单地呈现: 因此,模板中有

  • 我想知道是否有任何方法可以隐藏或禁用用户向Google Map Maker提供的自行车道/步道? 我的网站有一个骑行区,当你将地图从Google Earth切换到Google Maps时,会显示大量错误/不准确的地图制作数据。http://www.trailforks.com/riding_areas/cumberland 数据在Map maker上可见。http://goo.gl/Ebnq4 我

  • 这是我的HTML PHP表格页面的全部代码。。 我遇到的问题是,如果列和行(字段)为空, 当数据为空时,我想隐藏列和行字段。

  • 我浏览了很多帖子,但没有抓住要点。 我们能不能说:抽象=封装数据隐藏 或者不止这些!! 谢谢