如果名称包含点,如何在 dataTables 列初始化中获取 JSON 对象值?

Posted

技术标签:

【中文标题】如果名称包含点,如何在 dataTables 列初始化中获取 JSON 对象值?【英文标题】:How to get JSON objects value in dataTables columns initialization, if its name contains dots? 【发布时间】:2017-11-19 18:23:45 【问题描述】:

我正在使用数据表服务器端,但我无法获取 JSON 对象。 表是这样初始化的:

var table = $('#index-table-company_tutors').DataTable(
          buttons: buttons,
          serverSide: true,
          order: [[0, 'asc']],
          pageLength: 10,
          ajax: 'company_tutors.json',
          columns: [
             data: 'company_tutors.name' ,
             data: 'company_tutors.surname' ,
             data: 'company_tutors.phone' ,
             data: 'company.name'
          ]);

我使用的是 Rails,所以在索引控制器中我获取列名,然后在数据库中选择它,但在这种情况下,我需要连接两个属性具有相同名称的表。为此我需要使用company_tutors.name end company.name

format.json do
        # search[value]:

        # default 10 massimo 50
        limit = [(params[:length] || '10').to_i, 50].min
        # default 0
        offset = params[:start].to_i
        # always include :id column
        columns = (params[:columns]
        .reject  |_, value| value[:data] == ''  # workaround exclude empty column (last one)
        .map  |_, value| value[:data].to_sym  << :id).uniq
        #
        order = (params[:order].map do |_, spec|
          # default :id
          column = spec[:column] ? columns[spec[:column].to_i] : :id
          # default :asc
          dir = spec[:dir] == 'desc' ? :desc : :asc
          [column, dir].join(' ')
        end)
        page = if params[:search][:value].blank?
                 @company_tutors.joins(:farm)
                                .limit(limit).offset(offset)
                                .order(order)
               else
                 @company_tutors.joins(:farm)
                                .search(params[:search][:value])
                                .limit(limit).offset(offset)
                                .order(order)
               end
        @data = page.pluck(*columns).map  |x| Hash[columns.zip(x)] 
      end

这是生成的 JSON 示例:

"data":["company_tutors.name":"Name_test","company_tutors.surname":"Surname_test","company_tutors.phone":"335-7744391","company.name":"Company name","id":18]

JSON 生成良好,但 DataTable 给我这个错误:

DataTables 警告:表 id=index-table-company_tutors - 已请求 第 0 行第 0 列的未知参数“company_tutors.name”。更多信息 有关此错误的信息,请参阅http://datatables.net/tn/4

我想我必须将数据保存在一个变量中,而不是执行以下操作:

var table = $('#index-table-company_tutors').DataTable(
              buttons: buttons,
              serverSide: true,
              order: [[0, 'asc']],
              pageLength: 10,
              ajax: 'company_tutors.json',
              columns: [
                 data: mydata['company_tutors.name'] ,
                 data: mydata['company_tutors.surname'] ,
                 data: mydata['company_tutors.phone'] ,
                 data: mydata['company.name']
              ]);

但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

如果您的 JSON 属性名称中有圆点,则必须使用 \\ 转义圆点:

columns: [
   data: 'company_tutors\\.name' ,
   data: 'company_tutors\\.surname' ,
   data: 'company_tutors\\.phone' ,
   data: 'company\\.name'
]

否则 dataTables 会认为您指的是嵌套对象,即 company_tutors: name: 'xyz, ...

【讨论】:

以上是关于如果名称包含点,如何在 dataTables 列初始化中获取 JSON 对象值?的主要内容,如果未能解决你的问题,请参考以下文章

如果名称包含点,如何获取 JSON 对象值?

显示包含数据库表名称的 DataTable

如何在 Jquery / Datatables 中打印 [关闭]

如何检查 DataTable 是不是包含 DataRow?

c# datatable writexml控制列名

无法序列化 DataTable。未设置数据表名称