UI input with reactive-banana-wx
How do you get the content of ui elements when using reactive-banana开发者_如何学C? The event0 returns an event of type Event ()
, which has unit type instead of the type of the control. event1 takes an event of type Event w (a -> IO ())
, but command is of type Event w (IO ())
. mapAccumE and mapAccumB takes pure functions as parameters, so get text foo
can't be used with them.
Basically, you want to work with functions instead of data. If you're thinking "How do I create a behavior which has the current text in a box", you don't. Instead you write functions that take the current text as a parameter, and pass it in when necessary. Suppose you want to print the contents of a textbox when a button is pressed. Then you would do something like this:
eButton :: NetworkDescription (Event ())
eButton = event0 button command
network = do
pressButton <- eButton
reactimate $ (\() -> get text foo >>= print) <$> pressButton
If you need to get input into a Behavior, you can similarly use a function with type Behavior (String -> a)
(or whatever type you need), and then just pass the string in at the point of the reactimate
call.
(Author of reactive-banana speaking. Sorry for the late reply, the possibility of questions being asked here didn't even cross my mind. :-) )
I discovered today that I omitted a very crucial feature from the library: getting the content of a UI element as a Behavior
. Embarassing! :-D
John describes the current workaround, but the next version of reactive-banana will include the missing feature.
EDIT: I have released reactive-banana version 0.4 which now includes the functionality in form of a function
fromPoll :: IO a -> NetworkDescription (Behavior a)
精彩评论