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

WEF*_*EFX 7 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]);
}
Run Code Online (Sandbox Code Playgroud)

Chu*_*Lin 9

虽然这篇文章很老,但是如果有像我这样的人正在寻找原始tablesorter的修复程序,我通过sorton以下面的"延迟"方式触发来解决问题.

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

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

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


Mot*_*tie 3

嗯,这似乎是原始表排序器(演示)的问题。

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

  • 我只是看一下原始的tablesorter JS代码。在更新函数中,它在 setTimeout 函数中调用“cache = buildCache(me);”,该函数将在 1ms 后执行。这会导致排序在缓存更新之前使用缓存。因此,例如,如果我在触发“更新”100 毫秒后触发“排序”,那么我就可以完成排序,而无需在结果中附加额外的行。如果我错了,请纠正我。 (3认同)