我正在嘗試使用threepenny來了解FRP。將一個文本框和按鈕點擊到`UI(Event String)'
我想生成包含用戶輸入的事件,並在每次單擊按鈕時觸發。您可以在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
但它最終只是成爲空字符串第一次點擊後。在此之前,它包含值「灰」如預期。我認爲正在發生的事情是,當我生成事件流時,輸入的值將被提取,而不是每次點擊一次。我環顧了文檔,並沒有看到m a -> Event() -> m (Event a)
的任何內容,但我對frp很陌生,可能錯過了一些東西。
正如您已經注意到的那樣,值'val'不隨時間變化,它是調用'get'時的輸入小部件的值,即構造事件流時的值。你也可以通過查看它的類型來看到它:'val :: String',這是不會隨時間變化的。相反,'currName :: Behavior String',表示一個隨時間變化的'String'。 –