首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在客户机/服务器编程中使用三重gui/reactive

在客户机/服务器编程中使用三重gui/reactive
EN

Stack Overflow用户
提问于 2014-07-16 15:33:32
回答 1查看 399关注 0票数 1

我试图弄清楚如何使用Haskell 三重奏及其反应式功能来编写一个程序

  • 用户从listBox中选择一项
  • 将所选内容发送到外部服务器
  • 从服务器获取结果列表
  • 使用结果填充listBox
  • 重复

看来我需要使用HandlernewEventregister来完成上面的工作。如果有人能向我指出一些现有的代码,做类似上述的事情,那就太好了。

我发现的最接近的是GameThing.hs目录中的threepenny gui samples目录(但它不使用register)。

更新:

我是在问我是否应该使用HandlernewEventregister --如果应该的话,还应该对这些函数做一些澄清或举例说明。

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

代码语言:javascript
复制
browser  --> threepenny-gui (on localhost) --> backend server (anywhere on network)
         <--                               <--

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-17 10:39:30

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

代码语言:javascript
复制
{-# 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]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24784883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档