したがって、リストボックス、ボタン、テキストエリアを備えた簡単なレイアウトの例があります。ボタンをクリックすると、テキストエリアのテキストが変更されます。
import Control.Applicative
import Control.Monad
import Data.Maybe
import qualified Graphics.UI.Threepenny as UI
import Graphics.UI.Threepenny.Core
main :: IO ()
main = startGUI defaultConfig setup
setup :: Window -> UI ()
setup w = do
return w # set UI.title "Simple example"
listBox <- UI.listBox (pure ["First", "Second"]) (pure Nothing) ((UI.string .) <$> (pure id))
button <- UI.button # set UI.text "Button"
display <- UI.textarea # set UI.text "Initial value"
element listBox # set (attr "size") "10"
getBody w #+ [element listBox, element button, element display]
on UI.click button $ const $ do
element display # set UI.text "new text"
私がやりたかったのは、変更をリストボックスの選択に依存させることです(たとえば、選択に基づいて変更する"new text"
か、"First"
または"Second"
選択に基づいて変更します)。
userSelection
とfacts
を組み合わせることで、非常に簡単に選択を取得できます
facts . userSelection :: ListBox a -> Behavior (Maybe a)
しかし、テキストエリアの値の設定は
set text :: String -> UI Element -> UI Element
選択がBehavior
.
これはすべて私には少し単調に思えます.これを行う正しい方法は何だろうと思っていました. ボタンが押されたときだけでなく、リストボックスの選択が完了または変更されたときに、何かをする必要があるかもしれません。