gpt4 book ai didi

Clojure:Hiccup 表单处理程序

转载 作者:行者123 更新时间:2023-12-02 21:18:39 36 4
gpt4 key购买 nike

我正在使用 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))))))

我需要的是在特定表上选择下拉列表时发出发布请求(因为我认为这是唯一的方法,但我愿意接受建议)(以便“get-cols- nms"与所选表一起被调用)。这样,当在下拉列表中选择数据库的某个表时,就会自动显示该表的列。

所以,最终的要点是让我更好地理解这个函数:

 (drop-down "table" tables-n) 

我认为要做我想做的事,我需要标签有一个调用 JavaScript 函数的“onchange”属性。但我不知道:1)我是否可以使用打嗝表单助手下拉菜单来做到这一点; 2)我如何使用javascript发出post请求(如果这是唯一的解决方案,也许有一个打嗝的方式?)。

==编辑==

根据这个问题的答案,我重写了上面的代码。它应该非常简单。因为我认为那里没有那么多打嗝的例子,所以我将在这里发布我的代码以供引用。

请记住,此代码仍然存在问题:下拉菜单不会停留在所选项目上,而是会返回默认值。这是因为它提交了“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!"])))))

最佳答案

hiccup.form-helpers/drop-down 不直接支持向其 select 元素添加属性,但它确实保证其返回值中有一个标准的 hiccup 属性映射 - 这意味着属性是索引 1 处的映射(返回向量的第二个元素。

这意味着你可以做类似的事情

(assoc-in (drop-down ....) [1 :onchange] "this.form.submit()")

生成具有 onchange 属性的选择标记。

关于Clojure:Hiccup 表单处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140867/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com