If they were changing, you could implement your own reference system, where you 
have one stateful lookup map that you make globally available via a ref cursor. 
Instead of the actual changing values, you'd use lookup keys in your rendered 
cursors. Changes to values in the stateful lookup map would would reflect 
everywhere they are looked up. 

On Sunday, February 15, 2015 at 3:54:36 PM UTC+1, Scott Nelson wrote:
> I’m working on an Om application that includes a music browser and player 
> with a simple artist -> albums -> songs hierarchy.  When a user is viewing an 
> artist section I layout all the artist’s albums and songs hierarchically and 
> this works great since there is basically a 1-to-1 correspondence between the 
> component hierarchy and the data hierarchy.
> 
> Here’s a basic example of what a piece of the application state might look 
> like under some sort of :current-artist key:
> 
>     {:name “The Beatles”
>      :albums [{:name “Abbey Road”,
>                :songs [{:name “Come Together”}
>                        {:name “Something”}]}
>               {:name "Rubber Soul",
>                :songs [{:name "Drive My Car"}
>                        {:name "Norwegian Wood"}]}]}
> 
> When a user plays one of these songs I build an ordered playlist of all the 
> artist’s songs.  There is a player component that plays the playlist (even if 
> the user navigates away from the current artist section) and displays the 
> currently playing artist, album and song name.  To achieve this I ended up 
> duplicating a bunch of artist/album/song data elsewhere in the application 
> state.
> 
> Here’s what the :playlist path of the application state might look like after 
> a user clicked the play button next to “Drive My Car”:
> 
>     {:play-index 2
>      :songs [{:name “Come Together”
>               :album {:name “Abbey Road”
>                       :artist {:name "The Beatles"}}}
>              {:name “Something”
>               :album {:name “Abbey Road”
>                       :artist {:name "The Beatles"}}}
>              {:name “Drive My Car”
>               :album {:name “Rubber Soul”
>                       :artist {:name "The Beatles"}}}
>              {:name “Norwegian Wood”
>               :album {:name "Rubber Soul"
>                       :artist {:name "The Beatles"}}}]}
> 
> I think this sort of denormalization works fine in my case since the 
> artist/album/song data is not changing but I'm wondering if there is a better 
> way to accomplish this.  If the data were changing then I would imagine it 
> could become a challenge to keep the playlist data in sync.

-- 
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