我正在使用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]);
}
答案 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代码后得出的结论,如果我错了,请纠正我。
答案 1 :(得分:3)
嗯,这似乎与原始的tablesorter(demo)有关。
抱歉,我不记得更新过程中没有清除缓存的原因;但是我的fork of tablesorter(demo)中没有发生此问题。
答案 2 :(得分:0)
解决方案没有使用超时:
$("#myTBody")
.append(myRrows);
$("#myTable")
.trigger("update")
.trigger("sorton", [$("#myTable")[0].config.sortList])
.trigger("appendCache");
答案 3 :(得分:0)
旧帖子,但最近遇到了这个问题, 对我来说这有效
$("#myTable")[0].config.cache = null;
$("#myTable").trigger("sorton");
它只是保留缓存,或者我无法找到任何合理的标志来避免它,所以我将其设置为 null