Memory leaks 什么时候给你打电话?

Memory leaks 什么时候给你打电话?,memory-leaks,yui,destroy,Memory Leaks,Yui,Destroy,什么时候应该打电话?它是否曾被YUI生命周期自动调用?页面卸载是否会导致YUI生命周期对页面处理期间创建的所有对象调用destroy?我一直在这样一种假设下工作,即我需要自己进行所有销毁调用,但当ajax调用替换我逐步增强的代码部分时,这会变得很棘手。例如: <div id="replaceMe"> <table> <tr> <td>1</td> </tr> <tr>

什么时候应该打电话?它是否曾被YUI生命周期自动调用?页面卸载是否会导致YUI生命周期对页面处理期间创建的所有对象调用destroy?我一直在这样一种假设下工作,即我需要自己进行所有销毁调用,但当ajax调用替换我逐步增强的代码部分时,这会变得很棘手。例如:

<div id="replaceMe">
  <table>
    <tr>
      <td>1</td>
    </tr>
    <tr>
      <td>2</td>
    </tr>
  </table>
  <script>
    YUI().use('my-lib', function(Y) {
      Y.mypackage.enhanceTable("replaceMe");
    });
  <script>
</div>
单击处理程序将向我的应用程序提交一个请求,该请求将更改页面。我是否需要记住所有可增强的对象,并让onunload处理程序调用每个对象的destroy方法?或者YUI框架会处理这个问题吗


这个问题的最后一部分是,我还有其他代码,通过替换。这样,脚本将重新运行,并使用一个新的EnhancedTable扩展新的。我是否需要记住旧表,并在新表破坏它之前销毁它?

我不将处理程序设置为属性,而是将它们全部存储在如下数组中:

this._handlers = [ 
    container.delegate("mouseover", this._mouseover, "tr", this ),
    container.delegate("mouseout", this._mouseout, "tr", this ),
    container.delegate("click", this._click, "tr", this )
];
然后添加执行以下操作的析构函数方法

destructor : function() {
    new Y.EventTarget(this._handlers).detach();
}
它可以完成同样的事情,但你的工作量要少得多

理想情况下,不要对每个表运行此操作,而是将所有代理都附加到replaceMe,这样就不必在每次更改内容时都重新创建它,无论这是从何处发生的


YUI不会自动调用。卸载时为您销毁,但它会清理DOM SUB。以上是额外的积分,仅当您要自己销毁对象时才需要。

我不将处理程序设置为属性,而是将它们全部存储在如下数组中:

this._handlers = [ 
    container.delegate("mouseover", this._mouseover, "tr", this ),
    container.delegate("mouseout", this._mouseout, "tr", this ),
    container.delegate("click", this._click, "tr", this )
];
然后添加执行以下操作的析构函数方法

destructor : function() {
    new Y.EventTarget(this._handlers).detach();
}
它可以完成同样的事情,但你的工作量要少得多

理想情况下,不要对每个表运行此操作,而是将所有代理都附加到replaceMe,这样就不必在每次更改内容时都重新创建它,无论这是从何处发生的

YUI不会自动调用。卸载时为您销毁,但它会清理DOM SUB。以上是额外的积分,只有当你自己要销毁这个物体时才有必要