From 5bf9925d0ace3233f86e941fd95e378139cfe987 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 13 Mar 2012 19:20:40 -0600 Subject: [PATCH] Unsubscribe from Buffer when an Editor is removed from the DOM. --- spec/atom/editor-spec.coffee | 13 +++++++++++++ src/atom/editor.coffee | 11 +++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/spec/atom/editor-spec.coffee b/spec/atom/editor-spec.coffee index bb712ccc2..bf3132292 100644 --- a/spec/atom/editor-spec.coffee +++ b/spec/atom/editor-spec.coffee @@ -896,6 +896,19 @@ describe "Editor", -> editor.attachToDom() expect(editor).toMatchSelector ":has(:focus)" + it "unsubscribes from the buffer when it is removed from the dom", -> + buffer = new Buffer + previousSubscriptionCount = buffer.subscriptionCount() + + editor.attachToDom() + editor.setBuffer(buffer) + + expect(buffer.subscriptionCount()).toBeGreaterThan previousSubscriptionCount + expect($('.editor')).toExist() + editor.remove() + expect(buffer.subscriptionCount()).toBe previousSubscriptionCount + expect($('.editor')).not.toExist() + describe "when the editor recieves focused", -> it "focuses the hidden input", -> editor.attachToDom() diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index eb1717889..70531a0ed 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -165,8 +165,7 @@ class Editor extends View setBuffer: (buffer) -> if @buffer @saveEditSession() - @buffer.off ".editor#{@id}" - @renderer.destroy() + @unsubscribeFromBuffer() @buffer = buffer @@ -397,3 +396,11 @@ class Editor extends View logLines: -> @renderer.logLines() + + remove: -> + @unsubscribeFromBuffer() + super + + unsubscribeFromBuffer: -> + @buffer.off ".editor#{@id}" + @renderer.destroy()