【问题标题】:Avoiding duplicate objects in JavaScript dojo避免 JavaScript dojo 中的重复对象
【发布时间】:2012-06-27 03:39:44
【问题描述】:

我正在创建一个 DOM 元素的焦点对象来处理各种后续事件。但是,在元素失去焦点后,我需要以某种方式销毁该对象,以便将来对元素的关注创建一个不引用原始对象的新对象。

现在,我遇到的这个问题是后续单击会创建另一个对象,并且所有函数都被调用了两次。再次单击,三下。等等。下面的代码展示了一个点击事件和对象创建的例子。

任何帮助将不胜感激。

    var videoTopicsHandler = DojoOn(videoTopicsInput, 'focus', function(e){ 
        dropKeyPress(this, 'video-topics');
    });
    var dropKeyPress = function(input, ulId, scroll) {
        var handler;

        obj = new dropDownObj(ulId, scroll); 
        obj.attachEvents(obj, handler, input);
    };

【问题讨论】:

  • 这是使用dojo工具包吗?如果是这样,您应该将其标记为问题中不清楚的地方。

标签: javascript memory object dojo memory-leaks


【解决方案1】:

您可能希望缓存已创建的对象,并在元素重新获得焦点时从缓存中提取它们,而不是删除它们。优点:更快,无需在每次重新聚焦时重新生成对象并销毁它们;缺点:未使用的对象会占用内存,但如果您足够快地转到下一页,或者这些对象的数量很少并且重新聚焦经常发生,所以无论如何您都需要它们,这可能是无关紧要的。

【讨论】:

    【解决方案2】:

    试试这个:

    var obj = null;
    var dropKeyPress = function(input, ulId, scroll) {
            var handler;
            if(obj !== null) obj.destroyRecursively();
            obj = new dropDownObj(ulId, scroll); 
            obj.attachEvents(obj, handler, input);
        };
    

    【讨论】:

    • 我认为有一个错字,用 Recursive 替换 Recursively :)
    猜你喜欢
    • 2015-02-05
    • 2015-07-30
    • 2016-04-17
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多