我使用re-frame with spec来验证app-db,就像在todomvc示例中一样。
当用户输入无效条目时,我正在使用s/explain-data(在重新帧拦截器中)返回一个命名导致验证失败problems的 icate 的地图。:pred这个谓词是一个类似的符号project.db/validation-function。
我的验证函数有元数据,可以从 repl 使用:
(meta #'project.db/validation-function)
函数定义(在project.db命名空间中)如下所示:
(defn validation-function
"docstring..."
{:error-message "error message"}
[param]
(function-body...)
问题是我无法弄清楚如何动态检索元数据(在project.events命名空间中工作),例如:
(let [explain-data (s/explain-data spec db)
pred (->> (:cljs.spec.alpha/problems explain-data) first :pred)
msg (what-goes-here? pred)]
msg)
我尝试了以下方法来代替what-goes-here?:
symbol?给truestr给"project.db/validation-function"meta给nilvar给出编译时错误“无法解析 var: p1__46744# in this context”
我认为问题在于我得到了一个符号,但我需要它所引用的 var,这是元数据所在的位置。
我试过使用宏,但真的不知道我在做什么。这是我能找到的最接近的讨论,但我无法解决。
帮助!