基于行为的动态元素在三便器中的表现

时间:2015-02-13 13:30:34

标签: haskell frp threepenny-gui

简单来说,我正在寻找一种显示Behaviour (UI Element)的方法。

我的实际用例是显示一个可以过滤的表。所以我有一个函数tableElement :: String -> UI ElementString参数是过滤条件)和一个输入字段filterElement :: Element,它代表过滤器。结合这些的最自然的方式是这样的:

bFilter <- stepper "" (valueChange filterElement)
displaySomehow (fmap tableElement bFilter)

这也是在榆树中完成的方式。

到目前为止,我发现的最接近的事情是使用sink children,但这仅适用于[Element],而不适用于[UI Element]。另外,我必须使用虚拟元素作为父元素,或者与其余的孩子一起使用。

使用threepenny-gui实现类似这样的事情的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

(作者在这里)

请注意,UI Element表示操作,执行后可能会创建 new Element。你必须执行动作才能完成后者。不幸的是,目前没有办法在FRP风格中完全做到这一点,每当过滤器改变时,你将不得不求助onChanges组合器重新创建表。在那里,您可以使用set children

示例:

onChanges bFilter $ \s -> do
    el <- tableElement s
    myTable # sink children [el]

Bartab.hsCRUD.hs示例可能与您的情况有关。

答案 1 :(得分:0)

您可以currentValue使用UI ElementUI中获取{{1}},并且可以获取包含在HTML中的元素。