Я реализую простой раскрывающийся список с помощью икоты:
;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.
== РЕДАКТИРОВАТЬ ==
После ответа на этот вопрос я переписал приведенный выше код. Он должен быть довольно простым. Поскольку я думаю, что существует не так много примеров икоты, я опубликую свой код здесь для справки.
Пожалуйста, имейте в виду, что с этим кодом все еще есть проблема: раскрывающийся список не останется на выбранном элементе, а вернется к значениям по умолчанию. Это потому, что он отправляет «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!"])))))