7

我正在使用 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

4 回答 4

9

虽然这篇文章很旧,但以防万一像我这样的人正在寻找原始表格排序器的修复程序,我通过sorton以下“延迟”方式触发来解决问题。

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

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

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

于 2014-01-01T03:06:10.667 回答
3

嗯,这似乎是原始 tablesorter ( demo ) 的问题。

抱歉,我不记得更新期间没有清除缓存的原因;但是这个问题并没有发生在我的 tablesorter 分支demo)中。

于 2012-09-20T02:49:45.203 回答
0

不使用超时的解决方案:

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

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

于 2014-11-04T10:35:44.190 回答
0

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

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

它只是保留缓存,要么我找不到任何合理的标志来避免它,所以我将它设置为 null

于 2021-04-24T02:51:06.007 回答