私はhiccupを使って簡単なドロップダウンを実装しています:
;DATASET/CREATE
(defn get-cols-nms [table]
"This function gets the list of columns of a specific table".
(do (db/cols-list table)))
(defpartial form-dataset [cols-list]
(text-field "dataset_nm" "Input here dataset name")[:br]
(drop-down "table" tables-n)
(submit-button "Refresh")[:br]
(mapcat #(vector (check-box %) % [:br]) cols-list)
)
(defpage "/dataset/create" []
(common/layout
(form-to [:post "/dataset/create"]
(form-dataset (get-cols-nms (first tables-n))))))
(defpage [:post "/dataset/create"] {:as ks}
(common/layout
(let [table (ks :table)]
(form-to [:post "/dataset/create"]
(form-dataset (get-cols-nms table))))))
必要なのは、特定のテーブルでドロップダウンが選択されたときにポストリクエストを発行することです (これが唯一の方法だと思いますが、提案を受け付けています)選択したテーブルで呼び出されます)。このように、ドロップダウンでデータベースのテーブルを選択すると、テーブルの列が自動的に表示されます。
したがって、最終的には、この機能をよりよく理解することが主なポイントです。
(drop-down "table" tables-n)
私がやりたいことをするには、タグにJavaScript関数を呼び出す「onchange」属性が必要だと思います。しかし、私にはわかりません: 1) hiccup form-helper ドロップダウンを使用してこれを行うことができるかどうか。2)どのように発行できますか(これが唯一の解決策である場合、おそらく問題がありますか?)javascriptを使用して投稿リクエストを送信します。
==編集==
この質問への回答に続いて、上記のコードを書き直しました。かなり簡単なはずです。しゃっくりの例はそれほど多くないと思うので、参考のためにここにコードを投稿します。
このコードにはまだ問題があることに注意してください。ドロップダウンは選択した項目にとどまらず、デフォルトに戻ります。これは、「onchange」を送信するためです。私はまだその解決策を見つけることができませんでした。誰かが助けてくれるかもしれません...
;DATASET/CREATE
(defn get-cols-nms [table]
(do (db/cols-list table)))
(defpartial form-dataset [cols-list]
(text-field "dataset_nm" "Input here dataset name")[:br]
(assoc-in (drop-down "table" tables-n) [1 :onclick] "this.form.submit()")[:br]
[:input {:type "submit" :value "Submit" :name "name"}][:br]
(mapcat #(vector (check-box %) % [:br]) cols-list)
)
(defpage "/dataset/create" []
(common/layout
(form-to [:post "/dataset/create"]
(form-dataset(get-cols-nms (first tables-n))))))
(defpage [:post "/dataset/create"] {:as ks}
(common/layout
(prn ks)
(let [table (ks :table)]
(form-to [:post "/dataset/create"]
(if (= (:name ks) nil)
(form-dataset (get-cols-nms table))
[:p "It works!"])))))