Implementando uma função sSortType e de classificação personalizada para jQuery dataTables
Estou tendo dificuldades para seguir as instruções nodocumentação página. Eu tenho uma tabela exibindo as durações médias de tempo em uma coluna, no formato HH: MM, por exemplo, 10:45 significa dez horas e quarenta e cinco minutos. Gostaria de poder classificar minha tabela inteira pelos valores nesta coluna.
Aqui está o meu código de inicialização:
var aoTable = $("#TableStatistic").dataTable({
"bDestroy": true,
"sDom": "<'row-fluid dt-header'<'span6'f><'span6'T>>t<'row-fluid dt-footer'<'span6'i><'span6'p>>",
"oTableTools": {
"aButtons": ["xls", "pdf", "print"],
"sSwfPath": "../Content/media/swf/copy_csv_xls_pdf.swf"
},
"aaData": statisticsModel.byCategoriesList(),
"aaSorting": [[0, "desc"]],
"bPaginate": false,
"aoColumns": [
{ "mDataProp": "CategoryName", "sTitle": "Reports.CategoryName" },
{ "mDataProp": "AverageTime", "sTitle": "Reports.AverageTime", "sSortDataType": "duration-desc"},
{ "mDataProp": "NumberOfProblemsSolved", "sTitle": "Reports.NumberOfProblemsSolved" }
],
"oLanguage": MeridianTranslation.DataTable
});
Aqui está o queEU ASSUMO para ser a maneira correta de adicionar uma nova função de classificação e um novo sSortType à minha tabela:
jQuery.extend(jQuery.fn.dataTableExt.oSort['duration-desc'] = function (x, y) {
var xHours = parseInt(x.slice(0, x.indexOf(':')));
var xMinutes = parseInt(x.slice(x.indexOf(':') + 1, x.length)) + xHours * 60;
var yHours = parseInt(y.slice(0, y.indexOf(':')));
var yMinutes = parseInt(y.slice(y.indexOf(':') + 1, y.length)) + yHours * 60;
return ((xMinutes < yMinutes) ? -1 : ((xMinutes > yMinutes) ? 1 : 0));
});
jQuery.extend(jQuery.fn.dataTableExt.oSort['duration-asc'] = function (x, y) {
var xHours = parseInt(x.slice(0, x.indexOf(':')));
var xMinutes = parseInt(x.slice(x.indexOf(':')+1, x.length)) + xHours * 60;
var yHours = parseInt(y.slice(0, y.indexOf(':')));
var yMinutes = parseInt(y.slice(y.indexOf(':')+1, y.length)) + yHours * 60;
return ((xMinutes < yMinutes) ? 1 : ((xMinutes > yMinutes) ? -1 : 0));
});
Suponho que exista uma maneira muito melhor de extrair o número de minutos do que o modo como faço, mas vamos supor que meu algoritmo seja válido. O que devo fazer para inicializar corretamente minha dataTable e integrar essa função de classificação e tipo de dados nela? A própria tabela é renderizada corretamente, mas quando tento classificar a coluna em questão, ela se classifica lexicograficamente, como se fosse uma string. Alguma ideia?