This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-03-17
Channels
- # admin-announcements (4)
- # beginners (35)
- # boot (183)
- # cider (28)
- # cljs-dev (4)
- # cljsjs (1)
- # cljsrn (5)
- # clojure (52)
- # clojure-austin (4)
- # clojure-russia (83)
- # clojure-sdn (1)
- # clojure-uk (18)
- # clojurescript (48)
- # core-matrix (5)
- # cursive (4)
- # datomic (23)
- # devcards (2)
- # dirac (43)
- # editors (2)
- # emacs (4)
- # events (5)
- # funcool (2)
- # hoplon (81)
- # immutant (3)
- # juxt (3)
- # ldnclj (1)
- # luminus (12)
- # off-topic (6)
- # om (72)
- # onyx (32)
- # parinfer (2)
- # pedestal (1)
- # proton (6)
- # protorepl (3)
- # re-frame (30)
- # reagent (2)
- # spacemacs (2)
- # specter (1)
- # testing (1)
- # uncomplicate (3)
- # untangled (15)
- # yada (10)
привет. А как мне в cljs сделать свап в двух местах или последовательно, или так, чтобы реакт не влез между двумя свапами?
у меня в другом проекте есть решение с core.async, но это как-то стремно тащить его ради пары строк.
@rm да, именно фреймворк на фронте. ты и datascript базу используешь и в атомах данные хранишь?
да. У меня один стейт в реагентовом атоме, там несколько датаскриптовых баз и всякие другие штуки по мелочи
ну один способ доступа чтобы был, хотя и правда, наверное, не факт что нужно, если там разные сервисы
чота все равно не понимаю. Вот у меня есть игрушечное приложение, в нем такой стейт:
(defonce default-state
{:date nil
:requested? {:users false :meals false}
:meals (db/empty-db {:meal_id {:db/index true}
:date {:db/index true}
:time {:db/index true}})
:users {db/empty-db {:login {:db/index true}}}
:user "one"
:filter {:date {:from nil :to nil}
:time {:from nil :to nil}}})
зачем мне что-то совать в датаскрипт из того, что не там?@prepor я ковырял локализацию, а что интересует?
@delaguardo: для начала решение работающее и в clojure и clojurescript одновременно
@delaguardo: с каким-то простым форматом определения строк, который можно свести к стандартным key/value (gettext, json)
@rm я так понимаю, что у тебя часть данных в базе на клиенте, а часть в атоме, правильно?
tower неплох если только локализация, без плюрализации и форматирования дат и чего нибудь еще
https://github.com/DeLaGuardo/boot-gettext - вот еще моя поделка, сырая правда сильно
ничего кроме названия не сыязывает (
не довел пока до ума
@rm вот тут я запутался) я с датаскриптом не работал (потому и спросил), но а как ты данные запрашиваешь и изменяешь? у тебя есть сервисный ns для этого, который уже содержит детали реализации (swap! для атома и что там есть для датаскрипта)?
http://codepad.org/6oYJT12d вот мой ns для стейта, обрати внимание на update-meals-state
меня чего-то смущает хранение базы внутри атома вместе с другими значениями... может я чего-то не понимаю @rm
ну для чтения наверняка удобно, а вот как изменить данные? в твоем примере ты просто заменяешь базу целиком, правильно?
то есть, если есть в ней 100 записей, а прилетело еще 100, то я напишу (db-with old new-map) и оно обновится
во, так получается, что на чтение ты используешь датаскрипт, а на изменение свопаешь атом)) думаю, это не лучший подход (заменять базу целиком)
во, я думаю его и надо заюзать. иначе человеку со стороны (например, мне) будет тяжело разобраться в таком даже не большом проекте. не идиоматично и запутанно
я бы тогда вообще все сделал на датаскрипте, а если какие-то данные будут тяжелые, то можно вынести в атом, но не мешать их вместе
@rm посмотри здесь https://gist.github.com/allgress/11348685
potapenko: ну для этого датаскриптовая база должна быть в стейте. Я не вижу в этом ничего плохого, но abtv протестует
ну мне сложно сказать, я датаскрипт не юзал, но я думаю, что (ds/db-with (:users @state) data) не изменяет данные в базе как задумано разработчиком датаскрипта, а создает новую базу, вот тут я и протестую, как говорит @rm потому что коряво. А в связке реагента и датаскрипта судя по примеру (не моему) будет возня с подписками и отписками в :component-will-mount и :component-will-unmount , чтобы сказать реагенту, что данные изменились и пора перерисоваться. В общем, я не настаиваю, потому что сам не знаю, но мое чутье протестует
презентация в тему http://www.slideshare.net/fractallambda/datascript-and-reagent
@rm а ничего нового: создают атом и используют datascript/listen!, который сам изменяет значение атома, когда меняется значение по конкретному запросу. Просто ты внутри каждого компонента вызываешь bind (в котором спрятан вызов datascript/listen!) и он уже возвращает тебе обычный атом для реагента. В презентации почему-то нет примера с вызовом unbind, думаю его нужно вызывать, чтобы не плодить лишние атомы.