I've been working on my first app using re-frame and have run into the first 
real hurdle that I need some help with. 

Basically, the re-frame pattern for dealing with text inputs as I understand it 
is as follows:
- Create the input as part of a component, and dispatch a handler as the 
:on-change method
- In the handler, update a field in the app-db
- Subscribe the component to changes on the input field so that it will stay in 
sync with the app-db

This is essentially the way it is dealt with in the simple-example provided 
with re-frame. Unfortunately, when the input field is edited anywhere but the 
end of the textbox, the subscription fires and sets the value causing the 
cursor position to be reset to the end of the textbox. See 
https://github.com/Day8/re-frame/issues/39 for more info.

I don't see this as being a major issue in reagent itself, but it causes 
problems with the mental model of re-frame. One of the real selling points of 
re-frame to me is the ability to just subscribe and re-render components 
without having to really worry about synchronizing renders, at least for basic 
elements. I ran into it specifically when loading fields to edit, where I would 
like to just subscribe the input value but will instead have to pass it in when 
calling the component initially. This means I'll lose the easy synchronization 
between the input value and the app-db, which kind of sucks.

I spent a couple hours yesterday trying to figure out how to get the cursor 
position to reset itself by adding it into my existing handlers, subs, and 
components with no real luck. I was able to get the cursor position to reset to 
the right position at the right time occasionally, but the majority of the time 
it would fire either too early or too late and end up in the wrong place.

Based on the re-frame wiki 
(https://github.com/Day8/re-frame/wiki/Creating-Reagent-Components), it looks 
like there might be a way to do this using form-3 components, but this seems 
like a lot of extra work to unload onto anyone developing using re-frame.

My ideal thought is that developers could follow the way things are done in the 
existing simple-example as closely as possible. I think that it would mean some 
changes to how re-frame works, either by wrapping any subscriptions to input 
fields (and textarea) and resetting the cursor position after the update is 
fired, or adding some sort of helper method to make it easier for developers to 
implement when needed.

I hope that was clear, let me know if there's anywhere I've missed anything 
obvious or where I need to elaborate on the problem.

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