Я создаю страницу, которая отображает, а затем редактирует информацию о арендаторе с помощью om-boostrap. (Я знаком с Clojure, но новичок в CLJS/Om/React/современной веб-разработке в целом.) Пользовательский интерфейс и функциональные возможности между отображением и редактированием информации о арендаторе аналогичны — оба могут использовать поля ввода; редактирование просто требует, чтобы поля были «текстовыми», а не «статическими», и нужны кнопки «Отправить» и «Отмена».
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как React/Om может изменить такой компонент. Представление определяется следующим образом:
(defcomponent view [{:keys [id] :as app} owner]
(render
[_]
(let [tenant (get @tenants id)]
(dom/div
(om/build header/header-view app)
(dom/div {:class "h3"} "View Tenant\t"
(utils/button {:on-click (fn []
(om/update-state! owner
#(assoc app :edit? true))
(om/refresh! owner))}
"Edit"))
(om/build tenant-info {:edit? (:edit? app)
:tenant {:id id
:name "Funny name"
:unit-addr "Funny addr"
:rent "Lots of rent"}})))))
Я не буду вставлять сюда всю функцию tenant-view
, но она создает входные данные Bootstrap для каждого поля данных арендатора, используя om-bootstrap:
. . .
(let [input-type (if edit? "text" "static")]
(i/input {:ref "name-display"
:type input-type
:label "Tenant Name"
:label-classname "col-xs-2"
:wrapper-classname "col-xs-4"
:value (str name)})
. . .)
Я пробовал несколько подходов. Я опубликовал свой последний, используя функцию :on-click
кнопки для изменения состояния приложения, установив для свойства edit?
значение true
и запросив повторный рендеринг, чтобы сделать ввод редактируемым.
Это не работает, и я не нахожу указаний в документации React или Om.
- Как правильно отображать один и тот же компонент по-разному? (В моем случае поля ввода функции
view
.) - Какая документация React или Om актуальна?
ОБНОВЛЕНИЕ: я могу сделать входы доступными для редактирования, когда я жестко запрограммирую флаг edit?
на true
, поэтому проблема не в том, чтобы сделать входы редактируемыми: проблема заключается в переключении с static
на text
(и, предположительно, наоборот).
defui TodoItem
внизу страницы здесь, где DN имеет класс как завершенный и/или редактируемый, и это происходит прямо из состояния. - person Chris Murphy   schedule 13.12.2015