2013-04-13 36 views
1

我一直在這個問題上打破了我的頭約5-6小時了。淘汰賽tablesorter緩存行

我正在使用tablesorter與knockoutjs結合使用。我的問題是使用tablesorter, 行被緩存,當我嘗試刪除行時,它們從不消失。我已經創建了一個解釋問題的jsfiddle。你可以在小提琴中看到我的指示。

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

我已經看到了很多這談論這種問題的文章,但他們都說 我們需要改變,而我做的表,但沒有工作後打電話到觸發更新爲了我。

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

請讓我知道我做錯了什麼。

謝謝。

回答

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/

附:舉個例子,我通過函數綁定了.sortCol()以獲得對事件對象的訪問權限。您可以重寫模型以在模型屬性中存儲當前的排序參數。

+0

由於馬丁內斯......這讓我在正確的方向。 –

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"); 
}; 
+0

感謝您的幫助Mottie。即使這個解決方案在我製作的jsfiddle的情況下工作,但它並不適合我的實際應用程序。我必須確保在我可以將數據加載到綁定到ui的observablearray之前調用這個tablesorter插件,以便讓我的東西工作。當然,我不得不像馬丁內斯早些時候提到的那樣做。 –

+0

@ user1009036如果您使用的是接受的答案,那麼您確實不需要tablesorter。都很好 :) – Mottie