Мне нужно создать форму, содержащую поле выбора, где параметры зависят от доступных в настоящее время учетных записей электронной почты. Я получаю эти почтовые аккаунты в запросе API после загрузки страницы.
Следующая функция создает форму с элементом выбора.
(defn create-options [mail-accounts]
(for [m mail-accounts]
[:option {:key (keyword (str (:id m)))
:value (:id m)}
(:name m)]))
(defn render-mail-account-select [mail-accounts]
(let [form-state (r/atom {})]
(fn [mail-accounts]
(let [form [:form.mailing-form.form-horizontal
(into [:select.form-control {:field :list :id :mail-account}]
(create-options mail-accounts))]]
(pprint form)
[bind-fields form form-state]))))
pprint
дает мне следующий результат:
;; Before the mail-accounts are loaded
[:select.form-control {:field :list, :id :mail-account}]
;; After the state update containing the mail accounts
[:select.form-control
{:field :list, :id :mail-account}
[:option {:key :24, :value 24} "First mail account name"]
[:option {:key :25, :value 25} "Second mail account name"]]
Моя проблема в том, что выбор на моей странице остается пустым, как если бы выбор не был повторно отрисован.
Дополнение
Кажется, я забыл добавить код: я оборачиваю эту форму в компонент KIOO, где разыменовываю свой state
атом.
(defsnippet choose-account-panel "html/static-panel.html" [:div.panel]
[]
{[:h4.panel-title] (content "3. Mail Account wählen")
[:div.panel-body] (content [render-mail-account-select (:mail-accounts @state)])})
Затем этот компонент вызывает мою функцию render-mail-account-select
и должен правильно повторно отобразить форму.
form-state
, я могу создать локальное состояние компонента. - person Kungi   schedule 22.10.2015