2015-08-20 7 views
3

Я пытаюсь обновить свою систему, чтобы использовать 1.10 вместо 1.9 DataTables, и я пытаюсь найти способ передать содержимое строки с использованием объекта JSON вместо список. В частности, вместо передачи данных в формате [['data','data','data'],['data','data','data'],etc..] Я хочу поместить его в формат [['colA':'data','colB':'data','colC':'data']].Использование имен столбцов с DataTables с источником данных AJAX

Прямо сейчас у меня есть моя функция AJAX возвращающихся данных в этом формате, и я пытаюсь инициализировать с этим кодом:

$("table").DataTable({ 
    "columnDefs": [ 
     {"name": "wo_status", "title": "wo_status", "targets": 0}, 
     //repeat for each of my 20 or so fields 
    ], 
    "serverSide": true, 
    "ajax": "url/to/ajax/function" 
}); 

Результаты возвращаются из моей функции AJAX правильно, но DataTables является пытаясь найти индекс 0 в строке 0 и не найти его, потому что мои ячейки таблицы индексируются по имени столбца вместо числового индекса. Кто-нибудь знает, как сообщить DataTables использовать имена столбцов, указанные в columnDefs (или в другом варианте, который я не нашел) вместо числовых индексов?

ответ

9

Используйте columns.data возможность указать имена свойств, как показано ниже:

$("table").DataTable({ 
    "columns": [ 
     { "data": "colA", "name": "colA", "title": "colA" }, 
     { "data": "colB", "name": "colB", "title": "colB" }, 
     { "data": "colC", "name": "colC", "title": "colC" } 
     //repeat for each of my 20 or so fields 
    ], 
    "serverSide": true, 
    "ajax": "url/to/ajax/function" 
}); 
3

Использование Foreach в функции fnServerParams ...

enter image description here

$("table").DataTable({ 

    "columns": [{ 
    "data": "colA" 
    }, { 
    "data": "colB" 
    }, { 
    "data": "colC" 
    }], 

    "serverSide": true, 

    "ajax": "url/to/ajax/function", 

    fnServerParams: function(data) { 
     data['order'].forEach(function(items, index) { 
      data['order'][index]['column'] = data['columns'][items.column]['data']; 
    }); 
    }, 
}); 
0

Благодаря @ahmeti я Обновив подход:

ajax: { 
     url: fetchUrl, 
     data: function (data) { 
      data['columns_map'] = {}; 
      data['columns'].forEach(function(item, index) { 
       data['columns_map'][item.data] = data['columns'][index]; 
      }); 
      data['order'].forEach(function(item, index) { 
       data['order'][index]['column'] = data['columns'][item.column]['data']; 
      }); 
      return {"data": JSON.stringify(data)}; 
     } 
    }, 
Смежные вопросы