commit b92785f4952de51c9eedb6e060322afc45e8b36a parent 022ce6da0376a6bedd159f6006331907c385b16c Author: Daniel Barlow <dan@telent.net> Date: Sun, 20 Feb 2022 12:19:48 +0000 call observers in parent nodes Diffstat:
| M | just/observable-test.fnl | | | 8 | ++++++++ |
| M | just/observable.fnl | | | 5 | ++++- |
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git 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 @@ -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)))