2016-07-05 3 views
0

Я использую deferRender для заполнения моего datatable, однако, я все еще пытаюсь выполнить мою сортировку на стороне клиента (а не на стороне сервера).Datatables date sort with deferRender

Раньше я использовал атрибуты данных HTML5 (http://www.datatables.net/examples/advanced_init/html5-data-attributes.html), но я не уверен, как это использовать с deferRender.

Я попытался использовать плагин datetime-moment.js (https://datatables.net/blog/2014-12-18), но сортировка не применяется ко всему столбцу даты с этим применением (остальные столбцы таблицы по-прежнему сортируются).

Я определяю свою таблицу:

$.fn.dataTable.moment('DD/MM/YYYY'); 

$("#my_table").dataTable({ 
    dom: "Bfrtip", 
    ajax: { 
    "url": $('#my_table').data('json-source'), 
    "dataSrc": "" 
    }, 
    deferRender: true 
}); 

UPDATE

Я попытался с помощью данных HTML5 атрибуты с createdRow обратного вызова без успеха:

createdRow: function(row, data, dataIndex) { 
    var rowDate = $(row).find('td').eq(3).text(); 
    var dateOrderDate = moment(rowDate, "DD/MM/YYYY").format("YYYYMMDD"); 
    $(row).find('td').eq(3).attr("data-order", dateOrderDate); 
} 

ответ

0

Наше решение:

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "date-uk-pre": function (a) { 
    var ukDatea = a.split('/'); 
    return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1; 
    }, 

    "date-uk-asc": function (a, b) { 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 

    "date-uk-desc": function (a, b) { 
    return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
}); 

$("#my_table").dataTable({ 
    dom: "Bfrtip", 
    ajax: { 
    "url": $('#my_table').data('json-source'), 
    "dataSrc": "" 
    }, 
    deferRender: true, 
    aoColumns: [ 
    null, 
    null, 
    null, 
    { sType: "date-uk" }, 
    null, 
    null, 
    null, 
    null 
    ] 
});