我正在使用打嗝来实现一个简单的下拉菜单:
;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))))))
我需要的是发布一个帖子请求(因为我觉得这是唯一的方法,但我愿意接受建议)当在特定的桌子上选择下拉菜单时(以便“get-cols-使用所选表调用nms“。这样,当在下拉列表中选择数据库表时,将自动显示表列。
所以,最终,重点是让我更好地理解这个功能:
(drop-down "table" tables-n)
我认为要做我想做的事情,我需要标签有一个调用javascript函数的“onchange”属性。但我不知道:1)如果我可以使用打嗝形式帮助下拉列表来做到这一点; 2)如何发布(如果这是唯一的解决方案,也许有打嗝方式?)使用javascript发布请求。
== EDIT ==
在回答这个问题之后,我重写了上面的代码。它应该非常简单。我认为没有那么多打嗝的例子,我会在这里发布我的代码以供参考。
请注意,此代码仍有问题:下拉列表不会保留在所选项目上,但会以默认值返回。这是因为它提交了“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!"])))))
答案 0 :(得分:4)
hiccup.form-helpers / drop-down不直接支持向其select元素添加属性,但它确保在其返回值中有一个标准的hiccup属性映射 - 意味着属性是索引1处的映射(返回向量的第二个元素。
这意味着您可以执行类似
的操作(assoc-in (drop-down ....) [1 :onchange] "this.form.submit()")
生成带有onchange属性的select标记。