Would it be possible to use :on-blur or a similar event in order not to update the app-db until the user's focus leaves the field? That might be a possible workaround, though it wouldn't work if you need character-by-character updates as the user types...
Tim On Thursday, April 2, 2015 at 11:33:34 AM UTC-4, Shaun Mahood wrote: > 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.
