6

使用 reactive-banana 时如何获取 ui 元素的内容?event0 返回一个类型为 的事件Event (),它具有单元类型而不是控件的类型。event1 接受 type 的事件Event w (a -> IO ()),但 command 的 type Event w (IO ())。mapAccumE 和 mapAccumB 将纯函数作为参数,因此get text foo不能与它们一起使用。

4

2 回答 2

4

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

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

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

如果您需要输入行为,您可以类似地使用具有类型Behavior (String -> a)(或您需要的任何类型)的函数,然后在reactimate调用点传递字符串。

于 2011-07-01T17:40:23.177 回答
4

反应香蕉的作者。很抱歉回复晚了,我什至没有想到这里提出问题的可能性。:-))

我今天发现我从库中省略了一个非常重要的功能:将 UI 元素的内容获取为Behavior. 尴尬!:-D

John描述了当前的解决方法,但是下一个版本的响应香蕉将包含缺少的功能。

编辑:我已经发布了响应式香蕉版本 0.4,它现在包含函数形式的功能

fromPoll :: IO a -> NetworkDescription (Behavior a)
于 2011-07-04T14:31:25.243 回答