You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Jun 8, 2019. It is now read-only.
I'm having some memory leaks caused by components added to the screen via various jQuery plugins. After few hours of debugging, I found that those plugins have a destroy API I can all from the view before detaching it to prevent the memory leak. I tried to call this from leave() on the view, but that did not work.
It seems like the issue is now with the order of the calls remove() and _leaveChildren() in the code:
because remove() removes the view, and only then the view leave() method is called by running _leaveChildren(), the item is not really destroyed as it is no longer on the scree, resulting in memory leak.
My Q - can I change the order? what is the reason behind the current order?
If you think it's OK, I'll create PR with that change.
Thanks!
The text was updated successfully, but these errors were encountered:
To confirm I understand the problem, I tried to call this from leave() on the view, but that did not work. means code similar to the following?
varNodeView=CompositeView.extend({render: function(){this.$el.plugin();},leave: function(){this.$el.plugin("destroy");CompositeView.prototype.leave.call(this);}});varparent=newNodeView();varchild=newNodeView();parent.appendChild(child);// `.plugin("destroy")` in custom `leave()` does not work when called by `child`parent.leave();
If so, we can change the order. From git history the current order is how the methods were added.
@ecbypi yes that's the case. The issue is that jQuery plugins, such as typeahead, bootstrap-timepicker and many others, are not destroyed properly.
Reason is that when adding anything to the DOM using jQuery, jQuery saves a reference to that item event listeners. That data is stored under $.cache (what's $.cache?).
The problem is that even when I try to use destroy on the leave method, the event listeners are not removed as their bound element is not in the DOM anymore, which it turn create a memory leak.
When calling _leaveChildren() before remove(), the leak is prevented.
I'm having some memory leaks caused by components added to the screen via various jQuery plugins. After few hours of debugging, I found that those plugins have a destroy API I can all from the view before detaching it to prevent the memory leak. I tried to call this from leave() on the view, but that did not work.
It seems like the issue is now with the order of the calls remove() and _leaveChildren() in the code:
because remove() removes the view, and only then the view leave() method is called by running _leaveChildren(), the item is not really destroyed as it is no longer on the scree, resulting in memory leak.
My Q - can I change the order? what is the reason behind the current order?
If you think it's OK, I'll create PR with that change.
Thanks!
The text was updated successfully, but these errors were encountered: