Hi Jamie, It could (and probably will) be.
In my example, the Header component is the generic component but it might display a summary of the table being displayed elsewhere: --------------------------------------- - HeaderComponent "Displaying 10/1000" --------------------------------------- - TableComponent --------------------------------------- where "Displaying 10/1000" is the summary of the same data TableComponent is using. On the other hand, an "add screen" might look like: --------------------------------------- - HeaderComponent "Please fill in X" --------------------------------------- - FormComponent --------------------------------------- and so on. Other times the HeaderComponent won't have anything to display. This is obviously just a hoicky example though. On Tuesday, 18 November 2014 15:15:20 UTC, Jamie Orchard-Hays wrote: > Colin, is the optionally displayed component dependent on the data? > > > On Nov 18, 2014, at 5:24 AM, Colin Yates <[email protected]> wrote: > > > The reason I have shied away from multimethods is that they aren't local to > > the current namespace (which is the point I guess :)), and I tend to end up > > 'using' each namespace which declares a defmethod. > > > > For example, if I have a common/navbar which declares a defmulti say-hello, > > in > > page-1 I defmethod say-hello .. "page-1". In page-2 I do the same. The > > problem is that I end up with a main namespace which uses both page-1 and > > page-2 so when page-1 calls common/navbar the defmethod in page-2 is the > > one that takes precedence. > > > > I could pass in a qualifier to navbar which is used as part of the > > dispatching logic I guess (so page-1's qualifier is :page-1 etc.). > > > > How do you solve this? > > > > On Monday, 17 November 2014 12:52:44 UTC, David Nolen wrote: > >> I would leverage multimethods. However nothing prevents you from > >> composing components and passing them via props - this approach is > >> popular in React. > >> > >> David > >> > >> On Mon, Nov 17, 2014 at 6:49 AM, Colin Yates <[email protected]> wrote: > >>> Hi all, > >>> > >>> I keep running into the really common use case (and seeing others running > >>> into as well) of composing components. > >>> > >>> Quite simply, how is one supposed to compose components in om? > >>> > >>> In my particular use case I have a Header component which displays a > >>> title and optionally a component describing a summary of what is being > >>> seen (which is more than simple text). I want to do something like: > >>> > >>> (defn header [data owner] > >>> (reify > >>> om/IRender > >>> (render [_] > >>> (dom/div ..... > >>> (when optional-component) optional-component))))) > >>> > >>> It works if I put the component into either the header state or opts (e.g. > >>> (header data owner {:opts {:optional-component (om/build ...}})) > >>> > >>> but neither feel idiomatic. If I had to chose the lesser of two evils I > >>> would chose :opts I guess. > >>> > >>> I did consider multi-methods, but this didn't feel particularly nice > >>> either. > >>> > >>> What am I missing as this doesn't seem to be an obscure use-case :)? > >>> > >>> -- > >>> 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. > > > > -- > > 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. -- 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.
