使用反应性香蕉时,如何获得ui元素的内容? event0返回类型为Event ()
的事件,该事件具有单位类型而不是控件的类型。 event1采用类型为Event w (a -> IO ())
的事件,但命令的类型为Event w (IO ())
。 mapAccumE和mapAccumB将纯函数作为参数,因此get text foo
不能与它们一起使用。
答案 0 :(得分:4)
基本上,您希望使用函数而不是数据。如果您正在考虑“如何创建一个包含当前文本的行为”,则不会。而是编写将当前文本作为参数的函数,并在必要时传递它。假设您想在按下按钮时打印文本框的内容。然后你会做这样的事情:
eButton :: NetworkDescription (Event ())
eButton = event0 button command
network = do
pressButton <- eButton
reactimate $ (\() -> get text foo >>= print) <$> pressButton
如果需要获取行为的输入,您可以类似地使用类型为Behavior (String -> a)
的函数(或您需要的任何类型),然后在{{1}的点处传递字符串打电话。
答案 1 :(得分:4)
(reactive-banana发言的作者。对于迟到的回复,很抱歉,这里提出问题的可能性甚至没有让我想到。:-))
我今天发现我从库中省略了一个非常重要的功能:将UI元素的内容作为Behavior
获取。尴尬! :-D
John描述了当前的解决方法,但下一版本的reactive-banana将包含缺失的功能。
编辑:我已经发布了反应性香蕉version 0.4,它现在包含了函数形式的功能
fromPoll :: IO a -> NetworkDescription (Behavior a)