2012-09-19 9 views
5

Używam tablesorter do sortowania siatki na jednej z moich stron. Robię wywołanie AJAX co 10 sekund, aby zaktualizować informacje o stanie i odpowiednio aktualizować moją siatkę. Tyle działa, ale nie mogę dostać moich opcji sortowania, aby poprawnie buforować. Wydaje mi się raczej, że sortowanie zostało zbuforowane, ale kiedy to zrobię, tablesorter również buforuje moje poprzednie wiersze i wyświetla je wraz z nowym, posortowanym zestawem wierszy.Dlaczego mój tablesorter nadal buforuje moje stare wiersze?

Przykład, moja początkowa siatka ma 10 rzędów danych. Sortuję w drugiej kolumnie. Po 10 sekundach pojawia się nowy zestaw 10 wierszy, ale moje początkowe 10 wierszy nadal się wyświetla, mimo że je opróżniłem. Przeszukałem wszystkich i nie mogę znaleźć odpowiedzi na to.

Jeśli w ogóle nie sortuję, a nie wywołuję spustu "sorton", otrzymuję 10 wierszy zgodnie z życzeniem, ale wiersze nie są oczywiście posortowane. Jeśli zadzwonię do tego wyzwalacza dla "sorton", moje dane zostaną posortowane, ale otrzymam 10 nowych wierszy za każdym razem, gdy funkcja zostanie wywołana (łącznie 20 wierszy, potem 30 wierszy łącznie, itd.).

Oto mój kod z wnętrza mojego wywołania AJAX:

if (myResult.Data.length > 0) { 
    $.each(myResult.Data, function() { 
     myRows += "<tr><td>" + this.column1 + "</td><td>" + this.column2 + "</td></tr>"; 
    }); 
    $("#myTBody").empty(); 
    // $("#myTBody").append(myRows); //tried this first 
    // $("#myTable").trigger("update"); // combined with this 
    $("#myTBody").append(myRrows).trigger("update"); 
    var sorting = $("#myTable")[0].config.sortList; 
    $("#myTable").trigger("sorton", [sorting]); 
} 

Odpowiedz

3

Hmm, który wydaje się być problem z oryginalnym tablesorter (demo).

Niestety nie pamiętam, dlaczego pamięć podręczna nie została wyczyszczona podczas aktualizacji; ale ten problem nie występuje w moim fork of tablesorter (demo).

+2

I wystarczy spojrzeć na oryginalny tablesorter kodu JS. W funkcji aktualizacji wywołuje 'cache = buildCache (me);' w funkcji setTimeout, która zostanie wykonana po 1ms. Powoduje to, że sorton korzysta z pamięci podręcznej przed aktualizacją pamięci podręcznej. Tak więc, jeśli wyzwolę mój 'sorton' po 100ms uruchomiłem na przykład' update', wtedy mogę wykonać sortowanie bez dodatkowych wierszy dołączających do wyniku. Proszę, popraw mnie, jeśli się mylę. – ChunLin

+0

Ten sam problem z buforowaniem (spowodowany przez update -> sorton) w twoim widelcu. – Saran

7

Mimo że ten post jest stary, na wypadek, gdyby ktoś taki jak ja szukał poprawek do oryginalnego tablesortera, poprawiam ten problem, uruchamiając sorton w następujący "opóźniony" sposób.

$("#myTBody").append(myRrows).trigger("update"); 
var sorting = $("#myTable")[0].config.sortList; 
setTimeout(function() { 
    $("#myTable").trigger("sorton", [sorting]); 
}, 100); 

Powodem robi tak dlatego, że funkcja w oryginalnym tablesorter update nie od razu zaktualizować cache. Aktualizuje go 1ms po wywołaniu metody update. Tak więc sorton nie może natychmiast uzyskać zaktualizowanej pamięci podręcznej. To jest wniosek, który kończę po przeczytaniu oryginalnego kodu JS, proszę mnie poprawić, jeśli się mylę.

Demo: http://jsfiddle.net/eY8uH/692/

+0

to działało również dla mnie. Odpowiedź poniżej z Saran nie. – Richie

Powiązane problemy