2011-07-01 29 views
6

如何在使用反应型香蕉时获得ui元素的内容? event0返回类型为Event()的事件,它具有单位类型而不是控件的类型。 event1需要类型Event w (a -> IO())的事件,但命令的类型为Event w (IO())。 mapAccumE和mapAccumB以纯函数作为参数,因此get text foo不能与它们一起使用。用户界面输入与reactive-banana-wx

回答

4

基本上,你想使用函数而不是数据。如果您在考虑“如何创建一个包含当前文本的行为”,则不会。相反,您可以编写将当前文本作为参数的函数,并在需要时传递它。假设你想在按下按钮时打印文本框的内容。然后,你会做这样的事情:

eButton :: NetworkDescription (Event()) 
eButton = event0 button command 

network = do 
    pressButton <- eButton 
    reactimate $ (\() -> get text foo >>= print) <$> pressButton 

如果你需要得到输入到行为,你同样可以使用带有Behavior (String -> a)类型(或任何类型的需要)的功能,然后只需通过在弦拨打电话reactimate

4

(的reactive-banana作者说,很抱歉这么晚才回复,在这里被问的问题的可能性,甚至没有过我的脑海。:-))

今天我发现我忽略了非常重要的特征,从库:获取UI元素的内容为Behavior。尴尬! :-D

John描述了目前的解决方法,但下一个版本的reactive-banana将包含缺少的功能。

编辑:我已经发布了无功香蕉version 0.4现在包括在一个功能的形式的功能

fromPoll :: IO a -> NetworkDescription (Behavior a)