#lisp #clojure
Здравствуйте! Ещё в самом начале изучения Clojure. Подскажите пожалуйста. У меня есть clojure-проект. Я использую шаблонизатор hiccup и стили Bootstrap. Всё работает. Но вот только не понимаю как работают условные операторы в моём случае. Вот мой код: Файл project.clj: (defproject yupppie "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "ссылка (ссылка словом потому что не позволяет репутация вставлять)" :license {:name "Eclipse Public License" :url "ссылка"} :dependencies [[org.clojure/clojure "1.7.0"] [ring "1.4.0"] [compojure "1.4.0"] [hiccup "1.0.5"]] :plugins [[lein-ring "0.9.7"]] :ring {:handler yupppie.core/app}) Файл yupppie.core: (ns yupppie.core (:require [compojure.core :refer :all] [compojure.route :as route] [ring.middleware.params :refer [wrap-params]] [clojure.pprint :refer :all] [hiccup.core :refer :all] [hiccup.page :refer [include-css include-js]])) (defn home [] (html [:head (include-css "/bootstrap-3.3.6-dist/css/bootstrap.min.css") (include-css "/styles.css") (include-css "https://fonts.googleapis.com/icon?family=Material+Icons") (include-js "/bootstrap-3.3.6-dist/js/bootstrap.min.js")] [:body [:div {:class "col-lg-6"} [:div {:class "input-group"} [:input {:type "text" :class "form-control" :placeholder "How old are you?"} [:span {:class "input-group-btn"} [:button {:class "btn btn-default" :type=" button"} "Go, baby!"]]]]]])) ; (defroutes app (route/resources "/") (GET "/" [] (home)) (POST "/saveform" req (with-out-str (clojure.pprint/pprint (:params req))))) (def apps (wrap-params app)) Я стал изучать его недавно, так что пока не очень понимаю. У меня есть простая форма. И при вводе в поле цифры меньше 18 и нажатии на кнопку, нужно сделать так чтобы показывалась одна картинка, а при вводе цифры 18 или больше другая картинка. Вот как мне использовать условный оператор if, чтобы это заработало? Куда вставлять код и что писать?
Ответы
Ответ 1
Рассчитываю, что вы разберётесь, как прислать значение в форме. Я предположу, что с этим вы разобрались и в параметрах к запросу прилетает нужное значение. Предположу, что строка с присланным числом доступна в параметрах под ключом age и потому может быть забиндена в Compojure, как: (POST "/" [age] ???) Там строка. Нам надо число. Можно не изобретать велосипедов и затянуть функцию as-int из compojure.coercions. Правда, потребуется чуть-чуть изменить описание метода: (POST "/" [age :<< as-int] ???) Альтернативы? В них нет необходимости, реализация as-int предельно проста: (try (Long/parseLong s) (catch NumberFormatException _ nil)) Не видя её исходников ранее, я попытался написать код преобразования сам. Единственным отличием от as-int оказалось использование Integer/parseInt. И оно было ошибочным! Теперь считаем, достаточно ли юзер стар, и сообщаем об этом в шаблон (let [old-enough? (and (-> age nil? not) ; если число не распарсилось, придёт nil (< 18 age))] (функция-шаблончик old-enough?)) В шаблончике... ну, просто берёте и вместо одного из узлов DOM кладёте if. (defn функция-шаблончик [old-enough?] (html [:body (if old-enough? "YEAH" "NOPE")])) Примеры, конечно, совершенно примитивные. Но вы же можете их развить, верно? :)
Комментариев нет:
Отправить комментарий