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.

Reply via email to