From b92785f4952de51c9eedb6e060322afc45e8b36a Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Sun, 20 Feb 2022 12:19:48 +0000 Subject: [PATCH] call observers in parent nodes --- just/observable-test.fnl | 8 ++++++++ just/observable.fnl | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/just/observable-test.fnl b/just/observable-test.fnl index e6e922b..29b8c72 100644 --- a/just/observable-test.fnl +++ b/just/observable-test.fnl @@ -49,3 +49,11 @@ (s:observe [:foo] #(set win true)) (s:update [:foo :bar] 42) (expect (and win))) + +(let [s (observable.new {:foo {:bar {:baz 43}}})] + (var win 0) + ;; observers on ancestor trees are called after child trees + (s:observe [:foo] #(set win (/ win 2))) + (s:observe [:foo :bar] #(set win 4)) + (s:update [:foo :bar :baz] 42) + (expect (= win 2))) diff --git a/just/observable.fnl b/just/observable.fnl index e8edcc3..a2b7a32 100644 --- a/just/observable.fnl +++ b/just/observable.fnl @@ -6,7 +6,10 @@ (fn update [data self path value] (let [[first & rest] path] (if (next rest) - (update (. data first) self rest value) + (do + (update (. data first) self rest value) + (if data._subscribers + (each [_ f (pairs data._subscribers)] (f)))) (do (if data._subscribers (each [_ f (pairs data._subscribers)] (f)))