threepenny-gui 中基于行为的动态元素

Dynamic Elements based on Behaviour in threepenny-gui

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

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

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

这也是 Elm 中的做法。

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

用 threepenny-gui 实现类似功能的最佳方法是什么?

您可以使用 currentValue 从那里(希望)获得 UI 中的 UI Element 并且可以获得要包含在 HTML 中的元素。

(作者在此)

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

示例:

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

Bartab.hs and CRUD.hs 示例可能与您的情况相关。