2

我正在尝试使用threepenny来了解FRP。

我想生成包含用户输入的事件,并在每次单击按钮时触发。您可以在github上查看代码。

我试图用一个函数来做到这一点

submitEvents :: Element -> Element -> UI (Event String)
submitEvents button input = do val <- get value input
                               return $ val <$ (UI.click button)

它稍后会在这样的 do 块中使用。

nameE <- submitEvents loginButton userNameInput
currName <- stepper "Ash" nameE
element currNameElem # sink text currName

但它最终只是在第一次点击后变成空字符串。在此之前,它包含预期的值“Ash”。我认为正在发生的是,当我生成事件流时,输入的值被提取,而不是每次点击一次。我环顾了文档,没有看到任何内容m a -> Event () -> m (Event a),但我对 frp 很陌生,可能错过了一些东西。

4

1 回答 1

1

Oh, I see. I'm constructing what I need from UI.valueChange.

submitEvents :: Element -> Element -> UI (Event String)
submitEvents button input = do currVal <- stepper "" $ UI.valueChange input
                               return $ currVal <@ (UI.click button)

works great. I'm not sure if there's a more efficient way that only looks at it when a button is pushed though. I'm leaving the question open in case anyone finds a better answer.

于 2014-01-12T00:39:27.497 回答