Fork me on GitHub
#clojure-russia
<
2017-01-31
>
kishanov03:01:04

@leov я когда решал похожуя задачу с менюшкой решал (надо было на в зависимости от выбранного подменю выставлять класс “active” на рутовом элементе) переделывал 3 раза

kishanov03:01:40

первый раз делал так: обычно ui route выглядит так: /root1/child1, /root1/child2 и т.д. . Если я находился в child1, я брал полный route и отрезал весь хвост кроме до /root1 и потом в router’е делал resolve на обрубок урла

kishanov03:01:25

во второй раз невод выглядел так: я сделал мапу с метаданными, когда на любой раут, который является подменюшкой был специальный ключик “root-key”, типа {:child1 {:root-menu-key :root1} :child2 {:root-menu-key :root2}}

kishanov03:01:46

(была еще собственная имплементация раутера чтобы туда можно было метаданные набрасывать, но я ее убрал)

kishanov03:01:21

сейчас подход такой: есть отдельное определение раутов и есть sitemap, который “связывает” независимые рауты произвольными отношениями

kishanov03:01:52

в этом случае (подразумеваем, что router выставлят при навигации ключик route-name в что-то типа ::ui-asn-pool-list можно написать функции, которые берут на вход sitemap и ключик текущего раута и по структуре sitemap определяют инфорацию для менюшек, бредкрамбов, тайтлов и т.д.

kishanov03:01:18

у меня вообще сейчас вся архитектура приложения сводится к тому, что есть “статический state” (это определение раутов, форм, связей между разными плюшками в виде мап) и “динамический state” (текущий раут, значения форм в поле видимости, данные с сервера, нужные для этого view и т.д.)

kishanov03:01:39

в итоге контроллеры превратились в subscription-ы (использую re-frame) которые берут мапу статического стейта, значения из динамического стейта и на основе этих двух входные данных выводят значения для того, что должно рисоваться (какую вьюху рендерить, какие менюхи, как breadcrumb’ы считать и т.д.)

kishanov03:01:11

не претендую на то, что это хоть какой best practice, просто на данный момент (после 4х больших переписываний) это рабочая версия. Мне с UI route’ами надо ассоциировать еще кучу всего (типа какие API call’ы должны быть сделаны при переходе на данный раут, какие формы надо инициализировать и т.д.) поэтому я решил заложиться на расширяемую мапу метаданных, потому что туда можно всегда ключей накидать

dottedmag10:01:11

Ну, что никто не угадал https://twitter.com/mtnygard/status/821097080248737796, похоже.

dottedmag10:01:31

Хотя может ещё и что-нибудь более интересное напишет завтра 🙂

kishanov16:01:18

что-то этих когнитектовцев не поймешь, один Арахне пилит, другой Вазу, нет бы все вмести сели и end-to-end решение сделали полноценное

dottedmag17:01:02

Закомплекченное? troll

dottedmag17:01:03

Getting started "Как поставить вазу на пьедестал".

dottedmag17:01:08

Вот и стало понятно, зачем Cognitect сделал Client API в Datomic.

dottedmag17:01:06

@misha Твоя догадка была ближе всего к истине.

misha17:01:38

нее, я же прогнозировал "что-то чёткое" kappa

dragoncube17:01:11

кто-нибудь встречался с тем что lein игнорирует :prep-tasks и ничего из них не исполняет?

dottedmag17:01:09

@misha А что, ваза размытая?

misha17:01:06

ну она для пьедестала, мимо меня пока что

dottedmag17:01:59

Что-то как-то неприкольно. В этом месте даже протокол не вкорячили.

dottedmag18:01:06

Оказывается, Nygård клёвую книжку написал десять лет назад, "Release it".

dottedmag18:01:20

А теперь какие-то вазы лепит troll

misha19:01:40

релиз ит - четенькая книга

rmuslimov21:01:35

привет, я тут стал писать проект на cljs. И почти после каждой итерации рефакторинга, если я допускаю ошибку в хроме я вижу что то вроде GET net::ERR_CONTENT_LENGTH_MISMATCH. И все не ответа ни привета, что сломалось где непонятно

rmuslimov21:01:40

что я делаю не так?

rmuslimov21:01:10

фигвил не коннектиться, трейса нет. Хоть вешайся

rmuslimov21:01:42

проект то тривиальный не больше 1k LOC

artemyarulin21:01:04

т.е. при любой ошибке такое?

rmuslimov21:01:19

ну не при любой, но часто достаточно

rmuslimov21:01:29

а все так мучаются чтоли?

artemyarulin21:01:17

первый раз вижу, у меня фигвил сессия месяцами висит

dragoncube22:01:12

попробуй в firefox 🙂

rmuslimov22:01:55

да, файрфокс ок и новая инсталляция хрома-canary тоже ок

rmuslimov23:01:10

а нет, тоже самое

rmuslimov23:01:41

а джанга виновата! сорри, зря бочку катил на cljs. весь день к черту