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