eufon

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Mjust/observable-test.fnl | 8++++++++
Mjust/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)))