Clojure - 打嗝下拉菜单

时间:2017-05-18 08:18:00

标签: clojure hiccup

我在Hiccup中有一个Clojure表,它是从数据库中填充的。在一列中,我有从数据库设置的状态。

我想要做的是能够点击此值,并出现一个下拉菜单,您可以从下拉菜单中选择一个新状态。

我对如何做到这一点很困惑。我已经尝试使用带有占位符的表单,其中值来自数据库但是当我在浏览器中单击状态时,我必须键入而不是下拉列表。我如何获得下拉列表?

(defn row-data [data]
  (for [x data]
    (let [[entity-id id date text status] job]
      (hiccup/html
        [:tr
         [:td date]
         [:td id]
         [:td text]
         [:form {:method :post}
          [:td 
           [:input {:type :text :placeholder status}]]]
         ]))))

非常感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:3)

如果我了解您的任务,如果您不想输入字段,则无需将[:input]{:type :text}一起使用。 请尝试使用(drop-down attr-map? name options)

https://weavejester.github.io/hiccup/hiccup.form.html

此外,您可以尝试使表单看起来像这样:

[:form {:action "/handler_name"}
 [:td
   [:select {:name (str "update_status_" id)}
    [:option {:value "1"} "1"]
    [:option {:value "2"} "2"]
    [:option {:value "3"} "3"]
    [:option {:value "4"} "4"]]
   [:input {:type "submit"} "Update"]]]

答案 1 :(得分:0)

您需要一个像这样的向量:

 (def countries [["Mexico" 6]["Argentina" 5]
                 ["Chile" 3]["Colombia" 2]]) 

等等:

  (:require
        [hiccup.core :as c]
        [hiccup.form :as f]

  [:div.div-separator (f/drop-down {:class "form-class"} "country_id" countries)]

如果您有包含信息的地图,则可以使用reduce函数创建矢量:

(let [my-vector (reduce #(conj %1 [(:name %2) (:id %2)]) [] my-big-map)])