knockout tablesorter缓存行

时间:2013-04-13 05:02:12

标签: knockout.js tablesorter

我现在已经解决了这个问题大约5-6个小时。

我正在使用tablesorter和knockoutjs。我的问题是使用tablesorter时, 行被缓存,当我尝试删除行时,它们永远不会消失。我创建了一个解释问题的jsfiddle。你可以在小提琴中看到我的指示。

http://jsfiddle.net/a8jUj/29/

我一直在看很多关于这类问题的文章,但他们都这么说 我需要在更改表格之后调用触发器更新,但这对我来说没有用。

 $("#list1").trigger("update");

请让我知道我做错了什么。

感谢。

2 个答案:

答案 0 :(得分:0)

问题是.tablesorter插件没有在模型中对self.users数组进行排序,它只对实际的<tr>元素进行排序。您的列分类器必须使用自定义比较器显式调用observableArray.sort方法作为参数:

self.sortCol = function(colName, event) {

    // get sorting direction
    var th = event.target;
    th.sortDir = (th.sortDir == 'asc' ? 'desc' : 'asc');

    // array item comparator
    function comp(a, b){
        // get values to compare
        var av = a[colName](), bv = b[colName]();
        // compare using current direction
        if (th.sortDir == 'asc') {
            return av == bv ? 0 : av > bv ? 1 : -1;
        } else {
            return av == bv ? 0 : av < bv ? 1 : -1;
        }
    }
    // do sort
    self.users.sort(comp);
}

工作小提琴:http://jsfiddle.net/a8jUj/31/

P.S。例如,我通过函数绑定.sortCol()来获取对事件对象的访问权限。您可以重写模型以将当前排序参数存储在模型属性中。

答案 1 :(得分:0)

我认为您遇到的问题是更新时表本身不为空,或者只包含一行。清除tbody,然后添加你的行(updated demo):

self.resetUsers = function (data, event) {
    self.users.removeAll();

    $("#list1").find('tbody').empty();

    self.users.push(new User({
        name: "Sidney",
        age: 26,
        active: 1
    }));

    $("#list1").trigger("update");
};