2011-08-22 64 views
1

我在我的應用程序中廣泛使用jQuery UI(1.8.16)。重新創建按鈕集。我應該摧毀嗎?

我已經開發了一個簡單的功能與Ajax調用獲取一些JSON數據,並將其轉換使用jQuery UI buttonsets在尋呼機一個DIV:

<div id="answersPager"></div> 

這是JavaScript:

BuildAnswersPager: function(selectedPage, totalPages) { 
    $("#answersPager").empty(); 
    if (totalPages > 1) { 
    var ctl = []; 
    var isChecked = ""; 
    for (var i = 1; i <= totalPages; i++) { 
     if (i === selectedPage) { 
     isChecked = " checked='checked'"; 
     } 
     else { 
     isChecked = ""; 
     } 
     ctl[i] = "<input class='answersRadioPager' type='radio' value='" + i + "' id='a_page_" + i + "' name='answer_pager' " + isChecked + "/><label for='a_page_" + i + "'>" + i + "</label>"; 
    } 
    $("#answersPager").append(ctl.join('')); 
    $("#answersPager").buttonset(); 
    } 
} 

我已經將每個按鈕綁定到實時點擊事件,以便每次用戶搜索新術語時,我重新加載窗口,構建新的傳呼機並允許他/她分頁結果。

$(".answersRadioPager").live('click', function() { 
    // Fetches json data (new page) 
}); 

一切工作正常,但我想知道如果我要摧毀buttonset之前,我重建它(目前我只是清空)。

有沒有我必須注意的內存問題?

回答

1

不是。 .empty通過jQuery的內部.cleanData方法刪除附加到任何刪除標記的所有數據和處理程序,從而防止任何內存泄漏,所以你很安全。從docs

爲了避免內存泄漏,jQuery的除去 元件本身之前除去其他結構,例如從子元素數據 和事件處理程序。

FYI - .html還調用.cleanData,因此使用.html('')是等價的。

+0

感謝您的回覆。很有幫助。 – LeftyX

0

即使從未連接到父節點,buttonset()也不會將自己標記爲準備好進行垃圾回收。

嘗試:

  • 採取堆快照。
  • 實例化n個按鈕集,但不附加到任何父母的 ,也不添加任何偵聽器。
  • 拍攝堆快照。
  • 比較兩個快照並記下HTMLButton的增量。

我發現它需要調用buttonset('destroy')來糾正這種情況。