Я пытался обвести голову вокруг запросов. Предположим, мне нужен компонент Root
с несколькими видами таблиц.Понимание запросов Om и состава пользовательского интерфейса
official tutorial suggests - один подход должен состоять в том, чтобы иметь компонент табличного представления без запроса. И тогда вы можете передавать любые данные, которые нужно использовать через реквизиты, и это работает отлично.
Но это очень простой случай. В нетривиальном приложении, возможно, вы хотели бы иметь TableView
с запросом, потому что с помощью дерева пользовательского интерфейса вы можете иметь сложную структуру пользовательских интерфейсов - таблицу-заголовок, нижний колонтитул, строки, ячейки и т. Д. Теперь this tutorial предлагает подход с запросом:
И все же это еще несколько упрощенный пример. Так скажем, если у меня есть:
(defmethod read :numbers/odd [_ _ _]
{:value (filter odd? (range 50))})
(defmethod read :numbers/even [_ _ _]
{:value (filter even? (range 50))})
в реальном приложении, конечно, данные будут поступать из фоновых и Ом будут придерживаться его в состоянии атома (как обычно)
теперь мне нужно иметь TableView
компонент с запросом, который может отображать любой из этих (или любой последовательности в этом случае). Итак, вы видите Мне нужно как-то сообщить компоненту TableView
использовать данные, которые находятся где-то еще в атоме состояния. И запрос для TableView
должен быть «динамическим», поэтому я могу использовать несколько TableViews
визуализации разных данных.
Скажем, мы бы что-то подобное для корня:
(defui Root
(query [_] [{:table/odd ,,,} {:table/even ,,,}])
(render
[this]
(let [{:keys [table/odd table/even]}]
(html [:div
[:div.odds (ui-table-view odd)]
[:div.evens (ui-table-view even)]]))))
для brewity I опущена интерфейсы Om.Next
Теперь у меня есть несколько вопросов:
- Как должен выглядеть запрос для
Root
? - Должен ли я иметь параметризованный запрос в
TableView
(где я мог бы указать ключ для данных в атоме состояния)? Или как еще я могу сказатьTableView
использовать:numbers/odd
, а другой -:numbers/even
? - Если я использую параметризованный запрос в
TableView
, то как мне передать параметры отRoot
доTableView
? - Возможно, мне нужно передать данные или ссылку на данные TableView через вычисленные реквизиты?
- Как бы использовать то
om/get-query
(если параметризуется подзапрос)? - Как будут выглядеть методы чтения? Нужно ли мне «перемещать вещи» в атоме на
read
? Не звучит неплохо.
Может кто-нибудь, пожалуйста, покажет мне пример. Большое спасибо!.