我正在使用Clojure和Hiccup(与Noir一起),我有以下代码:
(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))))
我的问题与以下内容有关:
(for [nm (keys nms)] (drop-down nm (get nms nm))[:br])
我希望在表单中使用多选功能。上面的代码可以实现,但是由于没有考虑[:br],所以无法换行。不过,如果我这样做:
(form-to [:post (format "/dataset/table/%s" id)]
(drop-down "Test1" "1")[:br]
(drop-down "Test2" "2")[:br]
)
[:br] 标签确实有效。我相信这与 (for) 宏的工作方式有关,但我无法弄清原因和如何修复它。
编辑
如建议所示,我放弃了使用 for。最终结果如下(这是 Joost 的答案稍加修改):
(mapcat #(vector (drop-down % (nms %)) [:br]) (keys nms))