2011-08-22 54 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')来纠正这种情况。

相关问题