在 threepenny-gui 中组合事件和属性
Combining Event and an attribute in threepenny-gui
我有一个 Event String
,我想将其 sink
放入文本区域。这工作正常,但现在我想将复选框选择的当前值组合到这个字符串。
首先,我使用有效但有问题的复选框的 checkedChange
来完成此操作。如果 checked
值下沉到复选框,则没有 checkedChange-Event 并且文本区域中显示的值未正确更新。
我可以用 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
。
这是故意的:UI.checkedChange
事件仅在 用户 单击复选框时触发,但 不会 以编程方式设置。目的是 bBool
行为表示复选框的规范状态,UI.checkedChange
事件表示用户更改它的请求,可能会也可能不会被授予。这允许 bidirectional dataflow (see also)。诚然,Threepenny 目前还没有严格遵循这些想法。
对于您的情况,我建议将 UI.checkedChange
事件集成到 bBool
行为中以表示复选框的 "canonical" 状态。如果这不起作用,只需使用 get UI.checked
和 Reactive.Threepenny.unsafeMapIO
.
进行破解
我有一个 Event String
,我想将其 sink
放入文本区域。这工作正常,但现在我想将复选框选择的当前值组合到这个字符串。
首先,我使用有效但有问题的复选框的 checkedChange
来完成此操作。如果 checked
值下沉到复选框,则没有 checkedChange-Event 并且文本区域中显示的值未正确更新。
我可以用 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
。
这是故意的:UI.checkedChange
事件仅在 用户 单击复选框时触发,但 不会 以编程方式设置。目的是 bBool
行为表示复选框的规范状态,UI.checkedChange
事件表示用户更改它的请求,可能会也可能不会被授予。这允许 bidirectional dataflow (see also)。诚然,Threepenny 目前还没有严格遵循这些想法。
对于您的情况,我建议将 UI.checkedChange
事件集成到 bBool
行为中以表示复选框的 "canonical" 状态。如果这不起作用,只需使用 get UI.checked
和 Reactive.Threepenny.unsafeMapIO
.