From 528fae9466d6f856ad22b64216dc06396484fc6d Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 14 Dec 2012 14:29:20 -0800 Subject: [PATCH] Cleanup all subscriptions when a view is removed from the DOM --- spec/stdlib/space-pen-extensions-spec.coffee | 5 ++--- src/stdlib/space-pen-extensions.coffee | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/spec/stdlib/space-pen-extensions-spec.coffee b/spec/stdlib/space-pen-extensions-spec.coffee index fecda73fa..90c9d0b81 100644 --- a/spec/stdlib/space-pen-extensions-spec.coffee +++ b/spec/stdlib/space-pen-extensions-spec.coffee @@ -32,10 +32,9 @@ describe "SpacePen extensions", -> expect(observeHandler).not.toHaveBeenCalled() - it "unsubscribes on remove", -> + it "unsubscribes when the view is removed from the DOM", -> observeHandler.reset() - view.remove() - expect(view.hasParent()).toBeFalsy() + parent.remove() config.foo = { bar: "hello" } config.update() expect(observeHandler).not.toHaveBeenCalled() diff --git a/src/stdlib/space-pen-extensions.coffee b/src/stdlib/space-pen-extensions.coffee index 211eb845a..bf503fc8a 100644 --- a/src/stdlib/space-pen-extensions.coffee +++ b/src/stdlib/space-pen-extensions.coffee @@ -1,5 +1,6 @@ _ = require 'underscore' {View} = require 'space-pen' +jQuery = require 'jquery' originalRemove = View.prototype.remove @@ -17,3 +18,8 @@ _.extend View.prototype, remove: (args...) -> @unsubscribe() originalRemove.apply(this, args) + +originalCleanData = jQuery.cleanData +jQuery.cleanData = (elements) -> + jQuery(element).view()?.unsubscribe?() for element in elements + originalCleanData(elements)