2013-07-10 12 views
8

Ho bisogno di cambiare totalmente il contenuto di un datatable, facendolo da una prospettiva javascript. Non con qualsiasi chiamata Ajax o così come ho letto molte volte. Effettivamente fare il seguente script e cambiare il contenuto della tabella farà il trucco.jquery.dataTables: come modificare i dati totalmente contenuti/aaData?

ho pensato che posso usare il:

oTable.fnClearTable(); 
    oTable.fnAddData(R); 
    oTable.fnAdjustColumnSizing(); 

ma non funzionano.

e ottengo:

DataTables warning (table id = 'example'): Cannot reinitialise DataTable. 

To retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy 

qui è uno script di esempio:

<html> 
<head> 
<!-- 
<script type="text/javascript" src="ressources/json2.js"></script> 
<script type="text/javascript" src="ressources/jsonwspclient.js"></script> 
--> 
<script type="text/javascript" src="ressources/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
jQuery.noConflict(); // absolutely needed for others json libaries... so i use jQuery instead of $ 
</script> 
<script type="text/javascript" language="javascript" src="ressources/jquery.dataTables.js"></script> 
<script type="text/javascript"> 

function s1() 
{ 
    var R = [ 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":71}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"bbb","col3WithInt":40}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc","col3WithInt":19}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dd","col3WithInt":10}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7159975101151571,"col2":"eee","col3WithInt":14} 
    ]; 

    alert(JSON.stringify(R)); 

    var oTable = jQuery('#example').dataTable({ 
     "aaData": R, 
     "aoColumns": [ 
       { "mData": "col0" }, 
       { "mData": "co11WithFloatingValue" }, 
       { "mData": "col2" }, 
       { "mData": "col3WithInt" }, 
     ] 
    }); 
} 

function s2() 
{ 
    var R = [ 
    {"col0":"new","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":51}, 
    {"col0":"other","co11WithFloatingValue":0.9523809523809523,"col2":"bbb bbbbb bbb bbb","col3WithInt":42}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"again","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeee","col3WithInt":16} 
    ]; 

    alert(JSON.stringify(R)); 

    if(typeof oTable === 'undefined') 
    { 

// oTable.fnClearTable(); // can this be used? 

    var oTable = jQuery('#example').dataTable({ 
     "aaData": R, 
     "aoColumns": [ 
       { "mData": "col0" }, 
       { "mData": "co11WithFloatingValue" }, 
       { "mData": "col2" }, 
       { "mData": "col3WithInt" }, 
     ] 
    }); 
    } 
    else { 
    // how to change the data contained inside datatable? 
     oTable.fnClearTable(); 
     oTable.fnAddData(R); 
     oTable.fnAdjustColumnSizing(); 
    } 
} 


</script> 

</head> 
<body style="text-align: center; width: 100%;"> 
    <div> 
      <input type="button" id="btnS1" onclick="s1();" value="populate 1" /> 
      <input type="button" id="btnS2" onclick="s2();" value="populate 2" /> 
    </div> 

    <div> 
<table class="display" id="example"> 
    <thead> 
    <tr> 
     <th>col0</th> 
     <th>co11WithFloatingValue</th> 
     <th>col2</th> 
     <th>col3WithInt</th> 
    </tr> 
    </thead> 
    <tbody> 
    <!-- data goes here --> 
    </tbody> 
</table> 
    </div> 

</body> 
</html> 

risposta

6

Credo che l'aggiunta di jQuery ('# esempio') dataTable() fnDestroy();.. farà la cosa necessaria

function s1() 
{ 
    var R = [ 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":71}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"bbb","col3WithInt":40}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc","col3WithInt":19}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dd","col3WithInt":10}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7159975101151571,"col2":"eee","col3WithInt":14} 
    ]; 
    // alert(JSON.stringify(R)); 
    jQuery('#example').dataTable().fnDestroy(); // **please note this** 
    var oTable = jQuery('#example').dataTable({ 
     "aaData": R, 
     "aoColumns": [ 
       { "mData": "col0" }, 
       { "mData": "co11WithFloatingValue" }, 
       { "mData": "col2" }, 
       { "mData": "col3WithInt" }, 
     ] 
    }); 
} 

function s2() 
{ 
    var R = [ 
    {"col0":"other","co11WithFloatingValue":0.9523809523809523,"col2":"bbb bbbbb bbb bbb","col3WithInt":42}, 
    {"col0":"new","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":51}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"again","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeee","col3WithInt":16} 
    ]; 

    //alert(JSON.stringify(R)); 

    if(typeof oTable === 'undefined') 
    { 
    console.log('in if'); 
// oTable.fnClearTable(); // can this be used? 
    jQuery('#example').dataTable().fnDestroy(); // **please note this** 
    var oTable = jQuery('#example').dataTable({ 
     "aaData": R, 
     "aoColumns": [ 
       { "mData": "col0" }, 
       { "mData": "co11WithFloatingValue" }, 
       { "mData": "col2" }, 
       { "mData": "col3WithInt" }, 
     ] 
    }); 
    } 
    else { 
     console.log('in else'); 
    // how to change the data contained inside datatable? 
     oTable.fnClearTable(); 
     oTable.fnAddData(R); 
     oTable.fnAdjustColumnSizing(); 
    } 
} 
+1

thx per la risposta, ma sembra che non ha funzionato. In realtà non posso cambiare la denominazione di R, il codice fornito è una semplificazione, se riesco a farlo funzionare, sarò in grado di risolvere il mio problema. A proposito, secondo le mie intese, la denominazione va bene con mData e aoColumns, anche se non ne sono sicuro. Usando il comando bRetrieve si impedisce il messaggio di errore, ma non si cambia nulla, "populate2" non cambia mai il contenuto della tabella. Questo è ciò di cui ho bisogno, quando si fa clic su "populate1" con un contenuto, quando si fa clic su "populate2" ne viene fatto un altro, cambiando l'intera tabella ogni volta. cordiali saluti – user1340802

+0

Si prega di consultare la risposta aggiornata. Immagino tu abbia bisogno di distruggere il datatable esistente usando ** 'jQuery ('# esempio'). DataTable(). FnDestroy();' ** in modo che abbia nuovi dati nella stessa tabella sia per il clic – Yogesh

+1

ne ho trovato uno più, basta aggiungere ** '" bDestroy ": true,' ** nella dichiarazione datatable. Spero che questo ti aiuti questa volta. Non è necessario chiamare fnDestory method – Yogesh

6

qui è una risposta di lavoro completo, se potesse aiutare chiunque:

<html> 
<head> 

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css"></link> 
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
<script type="text/javascript"> 
jQuery.noConflict(); // absolutely needed for others json libaries... 
</script> 

<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"></script> 
<script type="text/javascript"> 

var oTable = null; 

function displayData(datas) { 
    var dataIsEmpty = (datas != undefined) && (datas.length == 0); 
    if (oTable != null || dataIsEmpty) 
    { 
    oTable.fnClearTable(); 
    if (! dataIsEmpty) 
     oTable.fnAddData(datas); 
    } 
    else {    
    oTable = jQuery('#example').dataTable({ 
     "bDestroy": true, 
     "aaData": datas, 
     "aoColumns": [ 
     { "mData": "col0" }, 
     { "mData": "co11WithFloatingValue" }, 
     { "mData": "col2" }, 
     { "mData": "col3WithInt" }, 
     ] 
    });     

    // Allow to resize manually the width of the columns 
    // jQuery("#example").colResizable(); // do not work... 
    } 
} 

function s1() 
{ 
    var R = [ 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":71}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"bbb","col3WithInt":40}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc","col3WithInt":19}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dd","col3WithInt":10}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7159975101151571,"col2":"eee","col3WithInt":14}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":71}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"bbb","col3WithInt":40}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc","col3WithInt":19}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dd","col3WithInt":10}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":71}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.9523809523809523,"col2":"bbb","col3WithInt":40}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc","col3WithInt":19}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dd","col3WithInt":10}, 
    {"col0":"resultForCol0","co11WithFloatingValue":0.7159975101151571,"col2":"eee","col3WithInt":14} 
    ]; 

    alert(JSON.stringify(R)); 

    displayData(R); 
} 

function s2() 
{ 
    var R = [ 
    {"col0":"new","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":51}, 
    {"col0":"other","co11WithFloatingValue":0.9523809523809523,"col2":"bbb bbbbb bbb bbb","col3WithInt":42}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"other","co11WithFloatingValue":0.9523809523809523,"col2":"bbb bbbbb bbb bbb","col3WithInt":42}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"new","co11WithFloatingValue":0.9523809523809523,"col2":"aåaa_utf8","col3WithInt":51}, 
    {"col0":"other","co11WithFloatingValue":0.9523809523809523,"col2":"bbb bbbbb bbb bbb","col3WithInt":42}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"whatever","co11WithFloatingValue":0.7830687830687831,"col2":"c'ccc cccc ","col3WithInt":14}, 
    {"col0":"changed","co11WithFloatingValue":0.7167011732229124,"col2":"dd dd dddddd ","col3WithInt":20}, 
    {"col0":"here","co11WithFloatingValue":0.7159975101151571,"col2":"eee eee e eeee ","col3WithInt":15}, 
    {"col0":"more","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeeeeeeee","col3WithInt":18}, 
    {"col0":"again","co11WithFloatingValue":0.7159975101151571,"col2":"eeeeeee","col3WithInt":16} 
    ]; 

    alert(JSON.stringify(R)); 


    displayData(R); 
} 


</script> 

</head> 
<body style="text-align: center; width: 100%;"> 
    <div> 
      <input type="button" id="btnS1" onclick="s1();" value="populate 1" /> 
      <input type="button" id="btnS2" onclick="s2();" value="populate 2" /> 
    </div> 


<table class="display" id="example"> 
    <thead> 
    <tr> 
     <th>col0</th> 
     <th>co11WithFloatingValue</th> 
     <th>col2</th> 
     <th>col3WithInt</th> 
    </tr> 
    </thead> 
    <tbody> 
    <!-- data goes here --> 
    </tbody> 
</table> 

<!-- 

    DataTables warning (table id = 'example'): Cannot reinitialise DataTable. 

To retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy 

--> 

</body> 
</html> 
+0

https://jsfiddle.net/ev2f3u0w/ – user648026

Problemi correlati