为什么我的tablesorter会继续缓存我的旧行?

时间:2012-09-19 22:11:33

标签: tablesorter

我正在使用tablesorter对我的一个页面上的网格进行排序。我每10秒钟进行一次AJAX调用,以获取更新的股票信息,并相应地更新我的网格。这很有用,但我无法正确地缓存我的排序选项。相反,我似乎已经缓存了排序,但是当我这样做时,tablesorter还会缓存我之前的行,并将它们与新的排序行一起显示出来。

示例,我的初始网格有10行数据。我排在第二列。 10秒后,一组新的10行进入,但我的最初10行仍然显示,即使我已经将它们清空了。我已经研究了所有,我似乎无法找到答案。

如果我根本不排序,并且我没有调用“sorton”的触发器,我会根据需要获得10行,但行当然没有排序。如果我将该触发器称为“sorton”,我的数据会被排序,但每次调用该函数时我会得到10个新行(总共20行,然后总共30行等)。

这是我的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]);
}

4 个答案:

答案 0 :(得分:8)

虽然这篇文章已经过时了,但是如果有像我这样的人正在寻找原始tableorter的修补程序,我会通过以下“延迟”方式触发sorton来解决问题。

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

这样做的原因是原始tablesorter中的update函数不会立即更新缓存。它在调用update方法后1ms更新它。因此,sorton无法立即获取更新的缓存。这是我在阅读原始JS代码后得出的结论,如果我错了,请纠正我。

演示:http://jsfiddle.net/eY8uH/692/

答案 1 :(得分:3)

嗯,这似乎与原始的tablesorter(demo)有关。

抱歉,我不记得更新过程中没有清除缓存的原因;但是我的fork of tablesorterdemo)中没有发生此问题。

答案 2 :(得分:0)

解决方案没有使用超时:

$("#myTBody")
  .append(myRrows);
$("#myTable")
  .trigger("update")
  .trigger("sorton", [$("#myTable")[0].config.sortList])
  .trigger("appendCache");

基于:https://stackoverflow.com/a/2013571/451962

答案 3 :(得分:0)

旧帖子,但最近遇到了这个问题, 对我来说这有效

$("#myTable")[0].config.cache = null;
$("#myTable").trigger("sorton");

它只是保留缓存,或者我无法找到任何合理的标志来避免它,所以我将其设置为 null