私はしゃっくりを使用して、簡単なドロップダウンを実施しています:のClojure:ヒカップフォームハンドラ
;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))))))
私はそれを行うには、この唯一の方法を考えるよう(POSTリクエストを発行することです必要があるが、私は何特定のテーブルでドロップダウンが選択されたとき(つまり、「get-cols-nms」が選択されたテーブルで呼び出されるように)このように、ドロップダウンでデータベースのテーブルが選択されると、テーブルの列が自動的に表示されます。
私はより良い、この機能を理解するので、最終的には、主なポイントは次のとおりです。
(drop-down "table" tables-n)
私は、私はJavaScriptを呼び出す「のonchange」属性を持っているタグを必要とやりたいと思います関数。しかし、私は知りません:1)私はこれを行うことができますかっこの形 - ヘルパードロップダウンを使用して、 2)どうすれば問題を解決することができますか(これは唯一の解決策で、多分面倒なやり方がありますか?)javascriptによる投稿要求。
== EDITの==
この質問への答えの後、私は、コードabove.Itは非常に簡単であるべき書き直しました。そこには面倒な例はあまりないと思うので、ここで私のコードを参考にして投稿します。
このコードにはまだ問題があります。ドロップダウンは選択したアイテムには残りませんが、デフォルトでは戻ります。これは、 "onchange"を提出するためです。私はまだ直接そのselect要素に属性を追加することはできませんが、それが保証しない]ドロップダウン/ hiccup.form-ヘルパー
;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!"])))))
ありがとうございました。パラメータも送信できますか?私は2つの "ボタン"を送信することができます(1つは "onchange"用、もう1つは本物の送信)。 – kfk
JavaScriptを追加したり、送信ボタンに名前+値を追加したりすることができます(ボタンを押すと送信されます)。この場合は、なぜあなたが望むのかわかりません。もしあなたが何かを選択していない、あなたが何かを選択した場合は、提出ボタンを押していない提出ボタンを押していた。または、おそらく2つの別々のフォームを代わりに使用したいと考えています。 –
こんにちは、スーパーヘルプありがとうございます。上記のコードを書き直しました。私の使用例ははっきりしているはずです。その種の実装が実際にクロージャーでない場合は、撮影してください... – kfk