Implementando un sSortType personalizado y una función de clasificación para jQuery dataTables
Me cuesta mucho seguir las instrucciones de ladocumentación página. Tengo una tabla que muestra el tiempo promedio de duración en una columna, en el formato HH: MM, por ejemplo, 10:45 significa diez horas y cuarenta y cinco minutos. Me gustaría poder ordenar mi tabla completa por los valores en esta columna.
Aquí está mi código de inicialización:
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
});
Esto es lo queASUMO para ser la forma correcta de agregar una nueva función de clasificación y un nuevo sSortType en mi tabla:
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));
});
Supongo que hay una forma mucho mejor de extraer la cantidad de minutos que la forma en que lo hago, pero supongamos que mi algoritmo es válido. ¿Qué debo hacer para inicializar correctamente mi tabla de datos e integrar esta función de clasificación y tipo de datos en ella? La tabla se procesa correctamente, pero cuando trato de ordenar la columna en cuestión, se ordena lexicográficamente, como si fuera una cadena. ¿Algunas ideas?