Have you looked at how editing is handled in the Om version of TodoMVC? http://github.com/swannodette/todomvc/blob/gh-pages/labs/architecture-examples/om/src/todomvc/app.cljs<https://github.com/swannodette/todomvc/blob/gh-pages/labs/architecture-examples/om/src/todomvc/app.cljs>
Callbacks and channels are both fine for inter-component communication and unlikely to get "unwieldy". This would be accomplished similarly with events in plain JavaScript to allow for loose coupling. David On Thu, Apr 3, 2014 at 12:11 PM, Dimitris Stefanidis <[email protected]>wrote: > Hi All, > > I have been following closely all the discussions related to om and > application architecture best practices. I have the same problems described > in the following thread > https://groups.google.com/forum/#!topic/clojurescript/SiRxM0HSoRk > > I would like to describe a couple of scenarios that with my current om > understanding seem very hard to model. > > I have a list of transactions. Transactions look like this. > [{:amount 10 :description "10 dollars" :created_at "03/04/2014"} > {:amount 20 :description "20 dollars" :created_at "04/04/2014"}] > > I have a transactions-view component that renders one > transaction-component for every transaction. > > The transaction-component renders 3 editable-view components on for each > key of the transaction hash. > > The user can edit the amount, description and created_at fields for each > list item by double clicking on them. This works fine. What I would like to > achieve now is the ability to jump in edit mode from field to field and > from transaction to transaction kind of like an excel sheet. When the user > clicks enter while editing the amount of a transaction the amount of the > transaction below it should go into editing state with the cursor in focus. > Similarly when he clicks tab while editing the amount the description of > the same transaction should go into edit mode and editing should end on the > amount field. > > This has me stumped for quite a few reasons some of them described below. > > 1. The editing flag should go in the transaction. There is no way to store > it in component state as it is currently being done for the editable-view > component. Some parent view will need to set the transaction in editing > mode. However the editing flag has nothing to do with the business logic of > the application. What if the same transaction is displayed on another place > of the app at the same time and I don't want it to be editable there. Is it > possible to pass a cursor that wraps the transaction somehow ? The > equivalent of a view model. Still this should be accessible to the parent. > > 2. How would I pass information to parent views that editing stopped with > enter or editing stopped with tab. Channels seem like a viable option here > or maybe a simple callback on the parent. Both those solutions I feel get > unwieldy really fast as the complexity of the application grows. Maybe a > simple pub channel with commands and events that everyone can listen to. > Still not the best of solutions. > > Similar problems appear with a simpler use case which is multiple > selection of transaction views and summarisation of them on side panel. How > do we maintain state of selected transactions ? Do we store them on an > other list called selected-transactions in our state ? If I edit a selected > transaction from the selected-list how is this going to be propagated to > the server and to the main transactions list. Do we put a selected flag to > the transaction ? Again what happens if this transaction is displayed on > another place in the ui and should not be selected ? > > -- > 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.
