2012-09-19 7 views
5

Sayfalarımdan birinde bir ızgarayı sıralamak için tablesorter kullanıyorum. Güncellenmiş stok bilgileri için her 10 saniyede bir AJAX araması yapıyorum ve şebekemi buna göre güncelliyorum. Çok fazla çalışıyor, ancak sıralama seçeneklerimi düzgün bir şekilde önbelleğe alamıyorum. Daha ziyade, sıralamayı önbelleğe almış gibiydim, ancak masaüstümde, önceki satırlarımı önbelleğe alır ve bunları yeni, sıralı satırlarla birlikte görüntüler.Neden tablolamacı eski satırlarımı önbelleğe tutuyor?

Örnek, ilk kılavuzum 10 satır veri içeriyor. İkinci sütunu sıralıyorum. 10 saniye sonra, yeni 10 satırlık bir dizi gelir, ancak ilk 10 satırım hala onları boşaltmamıza rağmen görünür. Her yerde araştırdım ve bunun cevabını bulamıyorum.

Hiçbir şekilde sıralamıyorsam ve "sorton" için tetikleyiciyi aramadım, 10 satırımı istediğim gibi aldım, ancak satırlar sıraya dizilmiyor. Bu soruyu "sorton" olarak adlandırırsam, verilerim sıralanır, ancak işlev çağrıldığında her seferinde 10 yeni satır alır (toplam 20 satır, sonra toplam satır 30, vb).

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]); 
} 

cevap

3

Hmm, orijinal tablesorter (demo) ile ilgili bir sorun gibi görünüyor:

İşte benim AJAX çağrısı içinden benim kodudur.

Maalesef, önbellekin güncelleme sırasında neden temizlenemediğini hatırlamıyorum; ama bu sorun benim fork of tablesorter (demo) içinde gerçekleşmiyor.

+2

Sadece orijinal tablesorter JS kodu bakabilirsiniz. Güncelleme işlevinde, 1ms'den sonra çalıştırılacak setTimeout işlevinde 'cache = buildCache (me); Bu, sorgunun önbellek güncellenmeden önce önbelleği kullanmasına neden olur. Böylece, eğer 100 ms sonra 'sorton'umu tetiklersem,' update '' i tetikledim, örneğin, sıralamayı sonuca ekleyen ek satırlar olmadan bitirebilirim. Lütfen yanılıyorsam beni düzeltin. – ChunLin

+0

Çatalınızdaki aynı önbellek problemi (güncelleme -> sorton nedeniyle). – Saran

7

Bu ileti eski olsa da, orijinal tablo yetkilisine yapılan düzeltmeleri arayan benim gibi biri varsa, aşağıdaki "gecikmeli" şekilde tetiklenen sorton sorununu giderdim. Orijinal tablesorter içinde update fonksiyon derhal önbellek güncelleme olmadığından

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

bunu yaparken nedenidir. update yöntemi çağrıldıktan sonra 1ms günceller. Yani, sorton güncellenmiş önbelleği hemen alamıyor. Bu, orijinal JS kodunu okuduktan sonra yaptığım şey, eğer yanılıyorsam lütfen beni düzeltin.

Gösteri: zaman aşımı ile w/o http://jsfiddle.net/eY8uH/692/

+0

bu da benim için çalıştı. Saran'ın aşağıdaki cevabı yoktu. – Richie