2013-01-19 6 views
8

Ich habe DataTables v1.9.4 von einem Javascript-Array bevölkert und ich habe Kontrollkästchen Spalte, die, wenn es :checked dann die ganze Zeile alle 5 Sekunden aktualisiert wird, das Problem ist, dass ich eine große fnRowCallback Funktion habe, die nicht nach Zeile ausgeführt wird Update also alle meine Zeilenstruktur Colapses. hier ist mein Update-Code:Wie aktualisiert man eine Zeile in Datatables ohne Tabellenneuaufbau?

function updateRow(){ 
    newRowData = $.data(document.body, 'updatedData'); 
    var newRow = []; 
    newRow.push(1, 1); 
    for (var title in newRowData[0]){ 
     newRow.push(newRowData[0][title]); 
    } 
    oTable.fnUpdate(newRow, updateIndex, false, true); 
}; 

und das ist mein fnRowCallback:

"fnRowCallback": function(nRow, aData, iDisplayIndex) { 
       //make 3state button and indicator for relay mask & status 
       $('td.relay', nRow).each(function(){ 
        relayStatus = $(this).text(); 
        $(this).html('<div class="hidden-value">' + relayStatus + '</div><div></div>'); 
        if(relayStatus == 1){ 
         $(this).children('div:last').addClass('relmas1'); 
        } 
        if(relayStatus == 0){ 
         $(this).children('div:last').addClass('relmas0'); 
        } 
        if(relayStatus == -1){ 
         $(this).children('div:last').addClass('relmas-1'); 
        } 
       }); 
       //makes update checkboxes 
       var clientID = $('td.clientid', nRow).text(); 
       $('td.update', nRow).html('<input type="checkbox" data-clientid="' + clientID + '" />'); 
       //makes volumes 
       var cuVol = parseInt($('td.volume', nRow).text(), 10) 
       $('td.volume', nRow).html('<div class="volume-container"><div class="volume-tmp">' + cuVol + '</div><div class="volume-slider"></div></div>') 
       $('td.volume div.volume-slider', nRow).slider({ 
        value: cuVol, 
        range: "min", 
        orientation: "horizontal", 
        slide: function(event, ui) { 
         cuVol = ui.value; 
         $(this).siblings('div.volume-tmp').text(ui.value); 
        } 
       }); 
      }, 

das Problem ist: , wie eine einzelne ausgewählte Zeile mit fnRowCallback neu zu zeichnen, ohne die gesamte Tabelle neu zu zeichnen und halten seine geprüft Zustand nach Neuzeichnen
EDIT:
Ich habe meinen Code doppelt überprüft und sehe, dass mein Code aktualisiert wird c orcectly aber das Problem ist, dass mein Code in der Tabelle in der Art geladen wird, wie es über Ajax empfangen wird, nicht in der Art, wie ich meine Tabellenspalten neu anlegte

Antwort

3

Sie können FnUpdate verwenden. Grundsätzlich funktioniert es durch Zeilenindex und alle Werte der Zeile eingefügt werden müssen (kann nicht mehr als 2 Werte eingeben, wenn man 4 Spalten haben beispielsweise)

Hier ist ein Link auf die API der Methode: jQuery DataTable fnUpdate

Ich denke, dass es den Reihenrückruf auslöst, aber ich bin nicht dafür sicher.

+0

tnx für antwort deine antwort ist fast korrekt und ich löste es etwa 10 monate vorher! aber tnx es cansolve – Homam

+0

sorry, ging durch Unbeantwortete, sah das Datum nicht. –