无法在Om应用程序中正确操作状态

时间:2015-01-17 23:35:37

标签: clojurescript om

我无法在Om应用程序中操纵状态。具体来说,我无法弄清楚如何从列表中删除项目。

这是我愚蠢的示范。这是一个破碎的简化应用程序。 https://gist.github.com/rerb/29d10959e71ba1e31e8e

显示两个按钮。按下时,他们应该自行移除。

删除第一项后,我在尝试删除第二项时收到此错误:

   Uncaught Error: No protocol method IDeref.-deref defined for type cljs.core/PersistentArrayMap: {:id 2}

如果我先删除第二个,我在尝试删除第一个时会收到此错误:

   Uncaught Error: Assert failed: Can't put nil in on a channel

我错过了什么简单的事情?我是Einstellung。

1 个答案:

答案 0 :(得分:4)

函数remove返回一个序列,而不是一个向量。您的州从{:buttons [{:id 1} {:id 2}]}转到{:buttons ({:id 1})}。在into之后使用remove解决您的问题:

(fn [buttons]
  (into [] (remove #(= button-id (:id %)) buttons))))

注意:我尝试使用Chestnut并且它似乎有效。此外,如果您从Om开始,请避免在开始时使用core.async。这是对Om的一个很好的补充,但在学习过程中使用两者对我来说太过分了。