我有Event String
我希望sink
进入textarea。这工作正常,但现在我想将复选框选择的当前值与此字符串组合。
首先,我使用复选框的checkedChange
执行此操作,但有问题。如果checked
值隐藏在复选框中,则没有checkedChange-Event,并且textarea中显示的值未正确更新。
我可以使用get checked
阅读复选框选项但是我遇到了Event String
和UI 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 String
和UI String
合并。
答案 0 :(得分:4)
这是故意的:UI.checkedChange
事件仅在用户单击复选框时触发,但不是时以编程方式设置。目的是bBool
行为表示复选框的规范状态,UI.checkedChange
事件表示用户更改它的请求,可能会也可能不会被授予。这允许bidirectional dataflow(see also)。诚然,Threepenny并没有严格遵循这些想法。
在您的情况下,我建议将UI.checkedChange
事件集成到bBool
行为中,以表示复选框的“规范”状态。如果这不起作用,只需使用get UI.checked
和Reactive.Threepenny.unsafeMapIO
进行修改。