2014-02-26 26 views
0

我已經有一些代碼在knockoutjs foreach上接連發生。它運行的對象是巨大的(> 1000個元素),我只想知道渲染何時完成。knockoutjs:afterrender導致大規模放緩

現在,我使用該解決方案發現here

但它是非常昂貴的,直到它完成掛起的頁面。

的一個AfterRender處理程序是:

ivm.renderHandler = function(elements, data) { 
    if (elements[1].parentNode.children.length === ko.toJS(ivm.classList).length) { 
     console.log("loaded"); 
     $("#sortable").sortable({ 
      revert: true 
     }); 
     $(elements[1].parentNode).children().draggable({ 
      connectToSortable: "#sortable", 
      helper: "clone", 
      revert: "invalid" 
     }); 

我敢肯定它的if()語句是這樣的問題,但我找不到任何方式加快這。

回答

1

假設ivm.classList是一個可觀察數組,調用ko.toJS是相當昂貴的,因爲它可以深度複製和展開視圖模型。如果您只需要觀察陣列的長度,就可以輕鬆訪問:

if (elements[1].parentNode.children.length === ivm.classList().length) { 
+0

獲勝者!我知道我錯過了一些明顯的東西。謝謝! – user1687050