【问题标题】:Combining Event and an attribute in threepenny-gui在threepenny-gui中结合事件和属性
【发布时间】:2015-09-08 18:51:10
【问题描述】:

我有一个Event String,我想将它sink 放入文本区域。这工作正常,但现在我想将复选框选择的当前值组合到这个字符串。

首先我通过使用复选框的checkedChange 来做到这一点,该复选框有效,但有问题。如果checked 值下沉到复选框,则没有checkedChange-Event 并且文本区域中显示的值没有正确更新。

我可以使用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 &lt;$&gt; get UI.checked checkBox,但我必须将Event StringUI String 结合使用。

【问题讨论】:

    标签: haskell threepenny-gui


    【解决方案1】:

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

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

    【讨论】:

    • 哦,这最后是一件相当容易的事情。刚刚更改 bBool 以包含 UI.checkedChange 并且它可以工作。谢谢!
    猜你喜欢
    • 2014-07-29
    • 2014-02-17
    • 2014-10-12
    • 2015-07-27
    • 2015-06-16
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多