In Om's basic tutorial, there is an example of using multimethod to dispatch different components:
------- Begin Code Snippet ------- (defn student-view [student owner] (reify om/IRender (render [_] (dom/li nil (display-name student))))) (defn professor-view [professor owner] (reify om/IRender (render [_] (dom/li nil (dom/div nil (display-name professor)) (dom/label nil "Classes") (apply dom/ul nil (map #(dom/li nil %) (:classes professor))))))) (defmulti entry-view (fn [person _] (:type person))) (defmethod entry-view :student [person owner] (student-view person owner)) (defmethod entry-view :professor [person owner] (professor-view person owner)) ------- End ------- The example above is fine, but I find it problematic if I wanted to have local state in either student-view or professor-view. First, local state in student-view is also visible in professor-view since they are rendered as the same component: entry-view. Second, if I wanted to implement om/IInitState, I will have to implement it in the component that will be rendered first. For example, if I modified student-view to be; ------- Begin Code Snippet------- (defn student-view [student owner] (reify om/IInitState (init-state [this] {:student-id 1}) om/IRenderState (render-state [_ state] (dom/li nil (:student-id state))))) ------- End ------- And in the UI, if professor-view is dispatched first, (init-state) in student-view won't get called. So I'd have to put student-view's initial local state in professor-view. For these reason, I wonder if multimethod should be avoided for components with local state, or if there are ways to keep local states independent in multimethods? Cheers Feng -- 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 clojurescript+unsubscr...@googlegroups.com. To post to this group, send email to clojurescript@googlegroups.com. Visit this group at http://groups.google.com/group/clojurescript.