【问题标题】:Jquery datatable data render function called multiple times多次调用jquery数据表数据渲染函数
【发布时间】:2021-07-05 10:55:18
【问题描述】:

我的数据表中只有 4 条记录

但是当我做控制台日志时

                columns:[
                        {
                            data: {},  name: 'mws_name', className: 'text-center', orderable: true, searchable: true, class:"mws_name", render: function (data,type,row) {
                                console.log(row.mws_name)
                                if(data.capabilities.length == 0){
                                   return data.mws_name
                               }else{
                                return data.mws_name +'&nbsp; &nbsp;' + `<span id="tool">&#x1F6C8;</span>`;
                               }
                            }
                        },

我看到多个名称和重复项

我需要删除重复项,因为我必须连接一些数据才能显示。谁能告诉我怎么了?

【问题讨论】:

  • 我怀疑“出了什么问题”是您误解了 console.log 以及 render 函数的作用和调用时间。您能否提供带有一些示例数据的 sn-p(不是通过 ajax 加载的)。有关示例,请参阅datatables SO wiki
  • 您是什么意思,先生?好吧,让我尝试提供一些 sn-p
  • 有没有使用render函数@freedomn-m的替代方法?
  • 是的,我已经更新了这个问题。我发现该渲染多次调用 console.log。我该如何避免它或我可以使用哪些其他方法?
  • 为什么我需要删除控制台日志?我没有找到在列函数中调用控制台日志一次的方法

标签: javascript jquery datatables


【解决方案1】:

列渲染函数应该被多次调用 - 每个“类型”一次。有关详细信息,请参阅orthogonal data 文档。

如果您不想看到多个日志输出,请针对您感兴趣的类型使用 if 语句。

例如:

render: function ( data, type, row ) {
  if ( type === 'display' ) {
    console.log(row.mws_name);
  }
  ... // the rest of your render function logic here
}

不同的type 值可用于存储sort 值或不同于display 值的filter 值。

因此,例如,您可能希望通过将 display 值包装在一些 HTML 中来将其显示为链接。但是在排序和过滤时,您希望 DataTables 只使用未更改的原始数据值,而不使用 HTML。

您的渲染函数可能根本不需要对这些正交值执行任何操作,在这种情况下,您可以忽略它们,就像您在问题中的代码中所做的那样。但正如您所注意到的,当您使用日志语句时,您会在后台看到它们的效果。

因此,底线是:如果您编写的代码没有引起任何问题,则无需担心此问题。如果您希望日志更清晰,请添加 if 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多