Ok, I’ll have to dig into your examples and code and see which approach
I’ll try.

On Wed, Apr 26, 2017 at 1:40 AM Jonathan Fischer <[email protected]>
wrote:

> It kind of comes down to how you're managing the state in your project.
> I'm using re-frame at the moment, so I have kind of top-level key in my
> project state to tell me what the user's looking at. Then I register my
> routes with Secretary and each route just kicks off an event that'll
> eventually modify that top-level key.
>
> So more specifically, my project's state is in one big map, and I have a
> key `:app/view` that has a view id I can use to figure out what to render,
> along with any additional info it might need.
>
> (def default-db
>   {:app/view {:view/id :view/sign-in}})
>
> My routing code looks like this (I only start listening to navigation
> events after a user has signed in, and stop again when she signs out):
>
> (ns my-app.routing
>   (:require-macros [secretary.core :refer [defroute]])
>   (:require [re-frame.core :refer [console dispatch]]
>             [goog.events :as events]
>             [secretary.core :as secretary])
>   (:import [goog.history Html5History]))
>
> (defonce history
>   (let [h (Html5History.)]
>     (events/listen h
>                    goog.history.EventType.NAVIGATE
>                    (fn [e]
>                      (when (.-isNavigation e)
>                        (secretary/dispatch! (.-token e)))))
>     h))
>
> (defn set-token! [token]
>   (.setToken history token))
>
> (defn get-token
>   "Returns the current history token (e.g. the stuff after the # in the
> URL)"
>   []
>   (.getToken history))
>
> (defn listen!
>   "Starts listening for and dispatching history/navigation events."
>   []
>   (.setEnabled history true))
>
> (defn stop!
>   "Stops listening for navigation events."
>   []
>   (.setEnabled history false))
>
> (defroute "/data-logging" []
>   (dispatch [:events/navigate {:view/id :view/data-logging}]))
>
> (defroute "/info" []
>   (dispatch [:events/navigate {:view/id :view/info}]))
>
> (defroute #"/page/(\d+)"
>   [page-id]
>   (dispatch [:events/navigate {:view/id :view/page :page/id (js/parseInt
> page-id)}]))
>
> (defroute "*"
>   ;; Catch-all history token router to show a 404 page, etc.
>   {:as params}
>   (dispatch [:events/navigate {:view/id :view/unknown}]))
>
> Again, using re-frame, so I dispatch an event and handle it elsewhere, but
> that navigate event just ends up modifying the :app/view key, something
> like:
>
> (swap! app-state #(assoc % :app/view new-value))
>
> Where app-state is a Reagent atom and updating it triggers a re-render.
>
> On Saturday, April 22, 2017 at 10:13:33 AM UTC-7, Jonathon McKitrick wrote:
> > I have an app that's been working wonderfully for a few years now. I
> want to improve it by adding links. If you see a person's name, I want to
> be able to click on that name and the app will jump to the 'user' page
> (simple enough) and then move the browser view to that particular item. In
> static HTML we'd obviously do that with a # and an anchor. But with
> Reagent, I'm not quite sure.
> >
> > I'm exploring Secretary right now, but what's the missing piece that
> will get me from a link to a Reagent-rendered page and then jumping to that
> row or even opening a modal with that item?
>
> --
> 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/7S4axBtK8Pg/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 https://groups.google.com/group/clojurescript.
>
-- 
Jonathon McKitrick

-- 
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 https://groups.google.com/group/clojurescript.

Reply via email to