Привет, ребята, я новичок в Clojure и ClojureScript ...
Я заполняю 2 элемента выбора ... Что я хочу сделать, это обновить второй выбор в зависимости от того, какой вариант пользователь выбирает в первый выбор.
Это мой код:
(ns easy-recipe.components.calculate
(:require [reagent.core :as r :refer [atom]]
[ajax.core :as ajax]
[reagent.session :as session]
[easy-recipe.components.common :refer [input select button]]
[easy-recipe.bulma.core :refer [horizontal-select horizontal-input-has-addons table columns box]]))
(defn handler [request]
(session/put! :categories (get-in request [:body :categories]))
(session/put! :breads (get-in request [:body :breads]))
(session/put! :recipes (get-in request [:body :recipes])))
(defn error-hadler [request]
(let [errors {:server-error (get-in request [:body :erros])}]
errors))
(defn get-categories-breads-recipes []
(ajax/GET "/api/calculate"
{:handler handler
:error-hadler error-hadler}))
(defn select-fun-wrapper [breads]
(fn [e]
(let [category_value (-> e .-target .-value)]
(reset! breads
(filter
#(= category_value (str (% :category_id)))
(session/get :breads))))))
(defn calculate-page []
(get-categories-breads-recipes)
(let [fields (atom {})
categories (atom nil)
breads (atom nil)
recipe (atom nil)]
(fn []
(reset! categories (session/get :categories))
;(reset! breads (filter #(= 1 (% :category_id)) (session/get :breads)))
[:div.container
[box
[horizontal-select "Category"
[select "category" "select" @categories (select-fun-wrapper breads)]]
[horizontal-select "Bread"
[select "bread" "select" @breads #()]]
[horizontal-input-has-addons "Quantity"
[input "quantity" "input" :text "" fields]
[button "quantity-btn" "button" "Add" #() nil]]]
[box
[columns
[table ["Ingredients" "Quantity"] @recipe]
[table ["Product" " "] [["30 Panes" "x"]]]]]])))
Как вы заметили, сброс хлеба! прокомментировано ... теперь "select-fun-wrapper" работает нормально, он обновляет выбор хлеба в зависимости от выбранной опции категории ... но если я раскомментирую эту строку, "select-fun-wrapper" перестанет работать ( не обновляет второй выбор) ... Я не знаю, почему он произошел?
Я не могу оставить эту строку с комментариями, потому что сейчас у меня проблема с запуском выбора "Хлеб" empthy ... Как я мог заполнить атом хлеба, не используя перезагрузку! функция?
Дополнительный код (если он прояснит):
(ns easy-recipe.bulma.core)
(defn horizontal-select [label select]
[:div.field.is-horizontal
[:div.field-label.is-normal>label.label label]
[:div.field-body>div.field.is-narrow>div.control>div.select.is-fullwidth
select]])
....
(ns easy-recipe.components.common)
(defn select [id class options function]
[:select {:id id :class class :on-change function}
(for [opt options]
^{:key (opt :id)}
[:option {:value (opt :id)} (opt :name)])])
....