Cojurescript Om:处理不同组件中的本地状态变化

nao*_*omi 5 clojurescript om

我正在建立一个基于om的表格,子章节可以被视为折叠或扩展.视图状态保存在子部分本地状态中:

(defn subsection-view [subsection owner]
  (reify
     om/IInitState
     (init-state [this]
        {:collapsed true}))

问题是每个子部分视图状态可以通过折叠 - 展开 - 全部按钮或通过为每个子部分显示的单独按钮双向实现.

为了处理expand-compress-all,以局部状态的形式保存了全局崩溃状态:

(defn form-view [data owner]
  (reify
    om/IInitState
    (init-state [this]
       {:all-collapsed true})))

显然,on-click通过更新本地状态下的折叠状态来处理两个按钮事件.

(om/update-state! owner :collapsed not)

我的问题是我应该如何知道最后更新了哪个状态才能显示正确的视图?

或者在哪里可以保存可能从组件树的不同级别中的不同触发器实现的崩溃状态的正确位置(本地状态或应用程序状态)?

Cha*_*les 2

我是 core.async 的粉丝,我会使用通道来实现它。我会让各部分侦听折叠/展开消息,并在消息出现时更改本地状态。当地状态的变化将导致重新抽签。展开单个部分仅更新该部分的本地状态。