This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
А есть какой-то свод правил как indent-ить код на clojure? Emacs в clojure-mode без доп. конфигурации делает как-то так:
(dom/div nil
(let [{{:keys [firstName
lastName
middleName]} :person} data]
Ну и тут как-то не очень хорошо выглядит:
(def st
(atom {:map1 {:key1 {:ink1 :v1
:ink2 :v2
:ink3 :v3}
:key2 {:ink1 :v1
:ink2 :v2
:ink3 :v3}
:key3 {:ink1 :v1
:ink2 :v2
:ink3 :v3}}
:map2 {:key1 {:ink1 :v1
:ink2 :v2
:ink3 :v3}
:key2 {:ink1 :v1
:ink2 :v2
:ink3 :v3}
:key3 {:ink1 :v1
:ink2 :v2
:ink3 :v3}}}))
Да, я эту доку смотрел. Но мне кажется делать столь большие отступы для map никакого редактора не хватит.
Вот вроде тоже не очень выглядит:
(defn func [data]
(reify
om/IRender
(render [this]
())
om/IRenderState
(render-state [this]
())))
Скачащие названия протоколов раздражают мое чувство прекрасного. 😉
@artofshine: как минимум последний пример имакс не так индентит
@prepor у меня именно так как я показал, уверенны, что у вас ничего не накручено на clojure-mode?
@artofshine: вот это только
(define-clojure-indent
;; Compojure
(ANY 2)
(DELETE 2)
(GET 2)
(HEAD 2)
(POST 2)
(PUT 2)
(context 2)
(defroutes 'defun)
;; Cucumber
(After 1)
(Before 1)
(Given 2)
(Then 2)
(When 2)
;; Schema
(s/defrecord 2)
;; test.check
(for-all 'defun))
Странно, такое за aquamacs не замечалось?
На данной странице, есть пример в котором описывается раскрытие связи для данных https://github.com/omcljs/om/wiki/Basic-Tutorial
На некоторой View
(defn registry-view [data owner]
(reify
om/IRender
(render [_]
(dom/div #js {:id "registry"}
(dom/h2 nil "Registry")
(apply dom/ul nil
(om/build-all entry-view (people data)))))))
Есть метод
(people data)
Вот что делает сам метод:
(defn people [data]
(->> data
:people
(mapv (fn [x]
(if (:classes x)
(update-in x [:classes]
(fn [cs] (mapv (:classes data) cs)))
x)))))
Собственно авторы раскрывают связь перед тем как передать объекты во внутреннюю структуру. В данном случае уровня вложенности в данных всего два и по этой причине они
:people
берут из data, но если рассматривать реальную ситуацию, то с ходу находятся примеры когда это не будет работать так как на данном уровне view просто не будет доступа к people из data. В результате каким-то образом нужно передать коллекцию через иерархию.Как результат в Facebook подумали и придумали Relay. В результате у каждого компонента описываются потребности в данных и если нужны доп справочники, то они протискиваются через всю иерархию.
В Facebook также предложили связать способ описания потребностей с GraphQL это язык запросов очень декларативного вида. Собственно ради чего я все это писал. В их случае им потребовалось на сервере реализовать некоторый backend, который умеет понимать GraphQL и возвращать данные. Выглядит это следующим образом: Описывается входная точка - query с параметрами, выполняется некоторая функция на JS которая достает кусок данных, и этот кусок данных прогоняется по схеме на соответствие и раскрытие. То есть если в схеме некоторое поле выглядит как функция, то она вызывается а на вход ей передаются параметры, которые были в соответствующем поле данных (к примеру там были id связанных сущностей).
Есть ли кто-то кто описывал схему подобным образом?
А чего на главной странице om не написанно что оно deprecated?
Ну это ладно, вопрос то в другом (я просмотрел ссылку): 1. Они не используют связанны данных (по ключам, id) без разницы 2. Соответсвенно там нет примера, каким образом в глубину появятся данные если их там просто нет. Там в принципе иерархий нет. Иерархия наименованием ключей реализованна 3. Если у нас 1000 записей и нам их нужно не просто курсором по 10 шт. разделить, а к примеру добавить туда условие
#(> 10000 %)