结合事件和threepenny-gui中的属性

时间:2015-06-23 05:55:42

标签: haskell threepenny-gui

我有Event String我希望sink进入textarea。这工作正常,但现在我想将复选框选择的当前值与此字符串组合。

首先,我使用复选框的checkedChange执行此操作,但有问题。如果checked值隐藏在复选框中,则没有checkedChange-Event,并且textarea中显示的值未正确更新。

我可以使用get checked阅读复选框选项但是我遇到了Event StringUI Bool(或UI String组合的问题,因为布尔值将转换为字符串)。

编辑:更确切地说,我想做一些像

这样的事情
bCombinedValue <- stepper "" eCombinedValue
element textArea # sink UI.text bCombinedValue

其中eCombinedValue包含原始Event String以及复选框的checked属性的当前值。

我可以

bCheck <- stepper False $ UI.checkedChange checkBox

但如果我有

,则会失败
element checkBox # sink UI.checked bBool

其他地方(没有UI.checkedChange)。

我可以使用show <$> get UI.checked checkBox,但我必须将Event StringUI String合并。

1 个答案:

答案 0 :(得分:4)

这是故意的:UI.checkedChange事件仅在用户单击复选框时触发,但不是时以编程方式设置。目的是bBool行为表示复选框的规范状态,UI.checkedChange事件表示用户更改它的请求,可能会也可能不会被授予。这允许bidirectional dataflowsee also)。诚然,Threepenny并没有严格遵循这些想法。

在您的情况下,我建议将UI.checkedChange事件集成到bBool行为中,以表示复选框的“规范”状态。如果这不起作用,只需使用get UI.checkedReactive.Threepenny.unsafeMapIO进行修改。