kfk*_*kfk 4 clojure hiccup noir
我正在使用clojure和打嗝(黑色),我有这个代码:
(defn dataframe [id]
(db/db-to-data id))
(defpartial drop-downs [nms]
(for [nm (keys nms)] (drop-down nm (get nms nm))[:br])
(submit-button "Refresh")
)
(defpage "/dataset/table/:id" {:keys [id]}
(common/layout
(form-to [:post (format "/dataset/table/%s" id)]
(drop-downs {"alessio" [:col0], "test" [:col1]})
)
(html-table (dataframe id))))
Run Code Online (Sandbox Code Playgroud)
我的问题是:
(for [nm (keys nms)] (drop-down nm (get nms nm))[:br])
Run Code Online (Sandbox Code Playgroud)
我希望在我的表单中有多个选择.上面这一行就是这样,但由于某些原因,它不考虑[:br],所以它不会破坏这些行.但是,如果我这样做:
(form-to [:post (format "/dataset/table/%s" id)]
(drop-down "Test1" "1")[:br]
(drop-down "Test2" "2")[:br]
)
Run Code Online (Sandbox Code Playgroud)
[:br]标签确实有效.我相信这与(for)宏如何工作有关,但我无法弄清楚原因以及如何解决它.
编辑
据我所知,我放弃使用for.下面的最终结果(这是Joost以轻微模式回答):
(mapcat #(vector (drop-down % (nms %)) [:br]) (keys nms))
Run Code Online (Sandbox Code Playgroud)
那段代码甚至没有编译; for只需要两个参数.
如果要在返回的序列中一次放置两个项目for,请将它们放在向量中并稍后将其解压缩.
虽然我个人更喜欢mapcat用于这些情况.就像是:
(into (form-to [:post (format "/dataset/table/%s" id)])
(mapcat #(vector (drop-down % (nms %)) [:br]) nms))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1191 次 |
| 最近记录: |