【发布时间】:2018-06-04 10:56:15
【问题描述】:
我是clojure 和试剂的新手。我试图生成动态数量的复选框,其状态存储在应用程序状态中,这是一个像这样的字典列表
[{:checked false, :text "Sample text 1"} {:checked false, :text "Sample text 2"} {:checked false, :text "Sample text 3"}]
下面的函数预计会生成一个对应于app的db的指定索引的复选框(db)。该功能可以完成工作,并且复选框是可单击的。
(defn gen-checkbox [index db]
[re-com/checkbox
:label (:text (@db index))
:model (:checked (@db index))
:on-change #(swap! db assoc-in [index :checked] (not(:checked (@db index))))
])
但是,当我单击任何复选框时,我会在浏览器控制台中收到此错误。
Uncaught Error: Assert failed: Reaction is read only; on-set is not allowed
错误发生在swap!。有人能指出我做错了什么吗?
db初始化部分如下:
(re-frame/reg-event-db ::initialize-db
(fn [_ _]
(atom [{:checked false :text "Sample text"}, {:checked false :text "Sample text"}, {:checked false :text "Sample text"}])
))
我还有一个函数来检索数据库。我目前正在接受
(re-frame/reg-sub ::getdb
(fn [db]
@db
))
【问题讨论】:
-
:on-change匿名函数周围有额外的括号吗? -
@exupero 这是一个错字。我已经纠正了。但是,错误仍然存在。
-
您能否展示一下处理您的
db的代码部分?你是怎么储存的?
标签: clojure single-page-application clojurescript reagent re-frame