javascript - JQuery Datatables: Kan ikke lese egenskapen 'aDataSort' av undefined
Jeg laget denne Fiddle, og den fungerer godt i henhold til kravene mine: Fiddle
Men når jeg bruker det samme i applikasjonen min, får jeg en feil i nettleserkonsollen som sier Kan ikke lese egenskapen 'aDataSort' av undefined
I min applikasjon leser JavaScript noe som nedenfor: Jeg har sjekket kontrollørens utdata...det fungerer bra og blir også skrevet ut på konsollen.
$(document).ready(function() {
$.getJSON("three.htm", function(data) {
// console.log("loadDataTable >> "+JSON.stringify(data));
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ', ' + error;
alert(err);
console.log( "Request Failed: " + err);
})
.success(function(data){
loadDataTable(data);
});
function loadDataTable(data){
$("#recentSubscribers").dataTable().fnDestroy();
var oTable = $('#recentSubscribers').dataTable({
"aaData" : JSON.parse(data.subscribers),
"processing": true,
"bPaginate": false,
"bFilter": false,
"bSort": false,
"bInfo": false,
"aoColumnDefs": [{
"sTitle": "Subscriber ID",
"aTargets": [0]
}, {
"sTitle": "Install Location",
"aTargets": [1]
}, {
"sTitle": "Subscriber Name",
"aTargets": [2]
}, {
"aTargets": [0],
"mRender": function (data, type, full) {
return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
}
}],
"aoColumns": [{
"mData": "code"
}, {
"mData": "acctNum"
}, {
"mData": "name"
}]
});
}
})
Svar #1
Det er viktig at THEAD-en din ikke er tom i tabellen. Siden dataTable krever at du spesifiserer antall kolonner for de forventede dataene. I henhold til dataene dine bør det være
<table id="datatable">
<thead>
<tr>
<th>Subscriber ID</th>
<th>Install Location</th>
<th>Subscriber Name</th>
<th>some data</th>
</tr>
</thead>
</table>
Svar #2
Hadde også dette problemet, Dette arrayet var utenfor rekkevidde:
order: [1, 'asc'],
Svar #3
For meg var feilen i selve DataTables; Koden for sortering i DataTables 1.10.9 vil ikke sjekke for grenser; dermed hvis du bruker noe som
order: [[1, 'asc']]
med et tomt bord, finnes det ingen rad idx 1 -> denne unntaket sikrer. Dette skjedde da dataene for tabellen ble hentet asynkront. Opprinnelig, ved sideinnlasting, blir dataTable initialisert uten data. Den bør oppdateres senere så snart resultatdataene er hentet.
Min løsning:
// add within function _fnStringToCss( s ) in datatables.js
// directly after this line
// srcCol = nestedSort[i][0];
if(srcCol >= aoColumns.length) {
continue;
}
// this line follows:
// aDataSort = aoColumns[ srcCol ].aDataSort;
