1

我试图弄清楚如何使用 Haskell threepenny-gui及其反应功能来编写一个程序,让

  • 用户从列表框中选择一个项目
  • 将选择发送到外部服务器
  • 从服务器取回结果列表
  • 用结果填充 listBox
  • 重复

看来我需要使用Handler,newEventregister执行上述操作。如果有人可以向我指出一些执行上述类似操作的现有代码,那就太好了。

我找到的最接近的是GameThing.hsthreepenny-guisamples目录(但它不使用register)。

更新:

我在问我是否应该使用Handler,newEventregister--- ,如果是的话,这些功能的一些说明或示例。

此外,需要明确的是,总体情况是:

browser  --> threepenny-gui (on localhost) --> backend server (anywhere on network)
         <--                               <--

换句话说,我需要做一些 IO(基于用户选择)然后显示该 IO 的结果。

更新:这是我的解决方案(基于@Taldykin 的回复):https ://github.com/haroldcarr/rdf-triple-browser/tree/master/haskell/src

4

1 回答 1

3

在此处输入图像描述

这是一段代码。稍后我将添加描述。

{-# LANGUAGE LambdaCase #-}
import Graphics.UI.Threepenny as UI


main :: IO ()
main = do
  (evFillList, doFillList) <- newEvent
  initialList <- valuesSupply ""
  behFillList <- stepper initialList evFillList

  startGUI defaultConfig $ \win -> do
    list <- ul
    sel <- listBox
        behFillList
        (pure Nothing)
        (pure $ \it -> UI.span # set text it)

    getBody win #+ [grid [[element list, element sel]]]
    setFocus $ getElement sel

    on selectionChange (getElement sel) $ \case
      Nothing -> return ()
      Just ix -> do
        items <- currentValue behFillList
        let it = items !! ix
        liftIO $ valuesSupply it >>= doFillList
        element list #+ [li # set html it]
        setFocus $ getElement sel


valuesSupply :: String -> IO [String]
valuesSupply x = return [x ++ show i | i <- [0..9]]
于 2014-07-17T10:39:30.690 回答