私は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))