Hi Aaron,

Thanks, now I know what cursors are good for, it works like you suggested.

Best Regards,
Sven


Am Freitag, 21. November 2014 15:50:45 UTC+1 schrieb Aaron Craelius:
> Hi Sven,
> 
> 
> So this is where you're going to want to use cursors. A cursor will isolate 
> change notifications to the path or getter that the cursor refers to. So, 
> either in the global scope or in a let outside of some rx you'll want to 
> write something like (def current-page (cursor state :current-page)). Then 
> you'll deref current page in your rx. Let me know if this works.
> 
> 
> Aaron
> 
> 
> On Fri, Nov 21, 2014 at 5:12 AM, Sven Richter <[email protected]> wrote:
> Ok, after trying out some more I got it working in two different ways:
> 
> 
> 
> 1. Declare a separate atom for the navigation. By using two different atoms 
> changes are only propagated to the views that each specific atom uses (so it 
> seems).
> 
> 
> 
> 2. The original code stores a reference to a function in the session atom 
> like this:
> 
>   (session/put! :current-page index)
> 
> And then the main view calls the function like this:
> 
>    [:div#content (rx ((session/get :current-page)))]])
> 
> 
> 
> I did this so that I don't keep a whole html structure inside an atom. This 
> does not work.
> 
> 
> 
> What works is this:
> 
>   (session/put! :current-page (index))
> 
>    [:div#content (rx (session/get :current-page))]])
> 
> 
> 
> But I am not sure if this is a good approach.
> 
> 
> 
> Best Regards,
> 
> Sven
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Am Freitag, 21. November 2014 10:53:05 UTC+1 schrieb Sven Richter:
> 
> 
> 
> > I created a minimal example from a chestnut project: 
> > https://github.com/sveri/freactive-example
> 
> >
> 
> > The relevant stuff happens in core.cljs and session.cljs. When you run the 
> > application, add some text to the input and then click the button, the 
> > input is rerendered, which is unexpected from my side.
> 
> >
> 
> > I hope that shows the problem I have.
> 
> >
> 
> > Best Regards,
> 
> > Sven
> 
> >
> 
> > Am Freitag, 21. November 2014 10:13:35 UTC+1 schrieb Sven Richter:
> 
> > > Hi Aaron,
> 
> > >
> 
> > > I took this idea from yogthos blog and the whole session namespace 
> > > contains an freactive atom plus some helpers:
> 
> > >
> 
> > > (ns de.sveri.dockerui.session
> 
> > >   (:refer-clojure :exclude [get])
> 
> > >   (:require [freactive.core :refer [atom]]))
> 
> > >
> 
> > > (def state (atom {}))
> 
> > >
> 
> > > (defn get [k & [default]]
> 
> > >   (clojure.core/get @state k default))
> 
> > >
> 
> > > (defn put! [k v]
> 
> > >   (swap! state assoc k v))
> 
> > >
> 
> > > (defn update-in! [ks f & args]
> 
> > >   (clojure.core/swap!
> 
> > >     state
> 
> > >     #(apply (partial update-in % ks f) args)))
> 
> > >
> 
> > >
> 
> > > So I am assuming that I can nest (rx ...) calls and only the part that 
> > > changes will get updated. Is that right?
> 
> > > This is basically what I am trying to achieve right now.
> 
> > >
> 
> > > Best Regards,
> 
> > > Sven
> 
> > >
> 
> > >
> 
> > > Am Freitag, 21. November 2014 00:23:25 UTC+1 schrieb Aaron Craelius:
> 
> > > > It should re-render the portion of your DOM that was in an rx that got 
> > > > invalidated. What does the implementation of sess/get look like?
> 
> > > >
> 
> > > >
> 
> > > > On Thu, Nov 20, 2014 at 5:21 PM, Sven Richter <[email protected]> 
> > > > wrote:
> 
> > > >
> 
> > > > Hi,
> 
> > > >
> 
> > > > I have been playing around and like it so far.
> 
> > > >
> 
> > > > I experience some behavior here where I wonder if it is intended or if 
> > > > I am doing something wrong.
> 
> > > >
> 
> > > > I have a main-page which I mount like this:
> 
> > > > (dom/mount! root (main-page))
> 
> > > >
> 
> > > > and which looks like this:
> 
> > > > (defn main-page []
> 
> > > > [...
> 
> > > > [:div#content
> 
> > > >     [(rx ((sess/get :current-page)))]]...
> 
> > > > it loads the current page into the content div, this works.
> 
> > > >
> 
> > > > Now I have one page which looks like this:
> 
> > > > (defn sub-page []
> 
> > > >   [:div
> 
> > > > ; ... some forms
> 
> > > >    [(rx (di-table))]])
> 
> > > >
> 
> > > > (defn di-table []
> 
> > > >   [:table
> 
> > > >    [:tbody
> 
> > > >     (for [di (sess/get :dis)]
> 
> > > >       [:tr [:td (:name di)]
> 
> > > >        [:td (:host di)]
> 
> > > >        [:td (str (:port di))]
> 
> > > >        [:td [:button {:id (:id di) :on-click #(delete-docker-instance 
> > > > (:id di))} "Delete"]]])]])
> 
> > > >
> 
> > > > It works as it rerenders when I change the state, however, it rerenders 
> > > > the whole page and not only the table, which I wouldn't expect. Is it 
> > > > possible to only rerender the table? I am using 0.1.0
> 
> > > >
> 
> > > > Best Regards,
> 
> > > > Sven
> 
> > > >
> 
> > > > Am Montag, 17. November 2014 03:20:40 UTC+1 schrieb Aaron:
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > > freactive (pronounced "f reactive" for functional reactive) is a new 
> > > > high performance, pure Clojurescript, declarative DOM library: 
> > > > https://github.com/aaronc/freactive
> 
> > > >
> 
> > > > It has a syntax very similar to that of Reagent and was in fact 
> > > > inspired by Reagent, Om, and others.
> 
> > > >
> 
> > > > I came up with it when I was doing some DOM programming after having 
> > > > spending a fair amount of time working with JavaFX (see my soon to be 
> > > > announced library fx-clj: https://github.com/aaronc/fx-clj). I thought 
> > > > Om and Reagent were very nice to work with (and actually inspired some 
> > > > what I did with fx-clj), but I felt from my desktop GUI experience, 
> > > > that I could take things a few steps further.
> 
> > > >
> 
> > > > freactive's main advantages over existing solutions are probably 
> > > > built-in animations support and slightly higher performance.
> 
> > > >
> 
> > > > Here are it's goals from the README:
> 
> > > > Provide a simple, intuitive API that should be almost obvious to those 
> > > > familiar with Clojure (inspiration from reagent)Allow for 
> > > > high-performance rendering good enough for animated graphics based on a 
> > > > purely declarative syntaxAllow for reactive binding of any attribute, 
> > > > style property or child node
> 
> > > > Allow for coordinated management of state via cursors (inspiration from 
> > > > om)Provide deeply-integrated animation supportAllow for cursors based 
> > > > on paths as well as lenses
> 
> > > > Provide a generic items view component for efficient viewing of large 
> > > > data sets
> 
> > > > Minimize unnecessary triggering of update eventsCoordinate all updates 
> > > > via requestAnimationFrame wherever possibleBe easy to debug
> 
> > > > Be written in pure Clojurescript
> 
> > > > Provide support for older browsers via polyfills (not yet implemented)
> 
> > > > Any feedback is welcome!!
> 
> > > > I'm not sure I like the name "freactive" - but it was the best I could 
> > > > think of at the time. Suggestions for alternative names are welcome.
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > > --
> 
> > > >
> 
> > > > Note that posts from new members are moderated - please be patient with 
> > > > your first post.
> 
> > > >
> 
> > > > ---
> 
> > > >
> 
> > > >
> 
> > > >
> 
> > > > You received this message because you are subscribed to a topic in the 
> > > > Google Groups "ClojureScript" group.
> 
> > > >
> 
> > > > To unsubscribe from this topic, visit 
> > > > https://groups.google.com/d/topic/clojurescript/99myJ9vLeKQ/unsubscribe.
> 
> > > >
> 
> > > > To unsubscribe from this group and all its topics, send an email to 
> > > > [email protected].
> 
> > > >
> 
> > > > To post to this group, send email to [email protected].
> 
> > > >
> 
> > > > Visit this group at http://groups.google.com/group/clojurescript.
> 
> 
> 
> --
> 
> Note that posts from new members are moderated - please be patient with your 
> first post.
> 
> ---
> 
> You received this message because you are subscribed to a topic in the Google 
> Groups "ClojureScript" group.
> 
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/clojurescript/99myJ9vLeKQ/unsubscribe.
> 
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> 
> To post to this group, send email to [email protected].
> 
> Visit this group at http://groups.google.com/group/clojurescript.

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to