Я реализую простой раскрывающийся список с помощью икота:
;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)
Я думаю, что для того, чтобы делать то, что я хочу, мне нужно, чтобы у тега был атрибут "onchange", который вызывает функцию javascript. Но я не знаю: 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!"])))))