【问题标题】:Rendering a multidimensional nested JSON response with DataTables使用 DataTables 呈现多维嵌套 JSON 响应
【发布时间】:2015-09-26 15:18:31
【问题描述】:

我有一个图像的 JSON 结构,每个图像在这个 JSON 中都有一些标签。结构是这样的:

{
 "data":[
  {
     "title":"Image Title",
     "slug":"image-title",
     "file_name":"f57fd83c-3c46-4f5b-95b8-446cca3664b5.jpg",
     "added_at":"2015-09-24",
     "tags":{
        "data":[
           {
              "name":"Some Dummy Tag Name",
              "slug":"some-dummy-tag-name"
           },
           ...
        ]
     },
     "added_by":{
        "data":{
           "email":"john@appleseed.com",
           "first_name":"John",
           "last_name":"Appleseed"
        }
     }
  },
  ...
  ]
}

我正在尝试在 DataTables 中显示此 JSON 数据。我已经设法渲染除标签之外的所有数据。我已将以下代码用于 DataTables 选项,但我无法获取标签的名称。它为每个图像中的每个标签返回 [object Object]。但是当我尝试在控制台上记录“data[key].name”时,它成功返回了名称。我做错了什么?

'columnDefs': [
    ...,
    {
        'targets': 2,
        'data': 'tags.data',
        'render': function(data) {
            return $.each(data, function(key) {
                return data[key].name;
            });
     }
},
...
],

提前致谢。

【问题讨论】:

    标签: javascript jquery json ajax datatables


    【解决方案1】:

    原因

    $.each() 返回它的第一个参数,即被迭代的对象。

    解决方案

    使用$.map() 生成标签数组,使用join(', ') 从数组中生成一个逗号分隔的标签列表作为字符串。

    'render': function(data, type, row) {        
        var tags = $.map(data, function(tag, i) {
           return tag.slug;
        });
    
        return tags.join(', ');
    }
    

    【讨论】:

    • 这完全有道理!谢谢!
    • 但是如果我不想用逗号分隔,我需要每一个都是新行。
    • @HosMercury,你可以改用return tags.join('<br>');
    • @HosMercury,然后查看child rows example
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多