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()