call observers in parent nodes

phoen
Daniel Barlow 2022-02-20 12:19:48 +00:00
parent 022ce6da03
commit b92785f495
2 changed files with 12 additions and 1 deletions

View File

@ -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)))

View File

@ -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)))