From fda4d337fd201730e6c66d52f61318d71ba9fccd Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Thu, 27 Nov 2014 12:43:31 -0500 Subject: [PATCH] Fix for disposing a ReactiveElement when it is detached from the tree (or moved) by some other method (say diffing). --- src/clojure/freactive/dom.cljs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/clojure/freactive/dom.cljs b/src/clojure/freactive/dom.cljs index b6a83e1..db66656 100644 --- a/src/clojure/freactive/dom.cljs +++ b/src/clojure/freactive/dom.cljs @@ -719,30 +719,29 @@ ref-meta (meta child-ref) - get-new-elem (fn [] + get-new-elem (fn get-new-elem-fn [] (set! (.-dirty state) false) (add-watch* child-ref state (.-invalidate state)) (or (non-reactively @child-ref) "")) - show-new-elem (fn [new-elem cur] + show-new-elem (fn show-new-elem-fn [new-elem cur] (let [cur (if (instance? ReactiveElement cur) (let [cur-elem (.-cur-element cur)] (set! (.-disposed cur) true) (set! (.-cur-element cur) nil) cur-elem) - cur) - - new-node - (if cur - (replace-child* parent new-elem cur true) - (insert-child* parent new-elem before))] - - (set! (.-cur-element state) new-node) - (set! (.-updating state) false) - (when (.-dirty state) - (queue-animation (.-animate state))) - (show-node new-node))) + cur)] + (if-let [parent parent] + (let [new-node (if cur + (replace-child* parent new-elem cur true) + (insert-child* parent new-elem before))] + (set! (.-cur-element state) new-node) + (set! (.-updating state) false) + (when (.-dirty state) + (queue-animation (.-animate state))) + (show-node new-node)) + (set! (.-disposed state) true)))) animate (fn animate [x]