Визуализация с использованием форматированных данных, сортировка с использованием необработанных данных в DataTables.net

Вот пример моей конфигурации datatables

{
    "dom"        : "rltip",
    "processing" : true,
    "serverSide" : false,
    "order"      : [ [ 1 , "desc" ] ],
    "searching"  : false,
    data: [
       { "column-a" : "Sample Data A" , "column-b" : 10 , "column-c" : "Blah Blah" },
       { "column-a" : "Sample Data B" , "column-b" : 5 , "column-c" : "Blah Blah" },
       { "column-a" : "Sample Data C" , "column-b" : 38 , "column-c" : "Blah Blah" }
    ],
    "columnDefs" : [
        {
            "targets"   : 0,
            "orderable" : false,
            "data"      : "column-a"
        },
        {
            "targets"   : 1,
            "orderable" : false,
            "data"      : "column-b"
        },
        {
            "targets"   : 2,
            "orderable" : true,
            "className" : "title",
            "data"      : "column-c"
        }
     ]
}

Я хотел отформатировать отображаемые данные, но при сортировке и других вещах, связанных с серверной частью, я хочу использовать необработанные неформатированные данные.

Важно: я должен сделать это на стороне клиента ( javascript ).

Я уже пробовал использовать обратный вызов функции render для columnDefs, но, похоже, он не работает.

"render" : function( data , type , row ) {

    if ( type === "sort" )
        return data;

    // format data here
    return data; // This is a formatted data

}

Что я имею в виду под «похоже, что это не работает», так это то, что сортировка нарушена, она будет учитывать отформатированные данные, а не только необработанные данные.

Я нашел эту старую связанную статью, но она больше не применима к более новой версии datatables.net.

https://datatables.net/forums/discussion/8249/filtering-using-the-rendered-text-however-sorting-using-the-original-value

Я использую версию 1.10.15


person Jplus2    schedule 11.07.2017    source источник


Ответы (1)


функция рендеринга вызывается несколько раз с разными значениями type. . Если вы установите для неформатированных данных только тип sort, вы пропустите другие релевантные типы для сортировки, такие как type. Вместо этого обработайте случай type display и верните неформатированные данные для любого другого значения в type.

"render" : function( data , type , row ) {    
    if ( type === "display" )
    {
       // format data here
       return data; // This is a formatted data
    }    
    return data; // This is a unformatted data    
}
person Shiffty    schedule 11.07.2017
comment
Черт, я был почти близок, спасибо за помощь, приятель, это сработало :) - person Jplus2; 12.07.2017
comment
Отличное решение! Сэкономьте мне много рефакторинга. Спасибо! - person markzzz; 27.07.2018
comment
Это то, что следует добавить в руководство, потому что подход к сортировке программного обеспечения довольно непрозрачен. - person Jason K.; 21.05.2020