- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个简单的示例布局,其中包含一个列表框、一个按钮和一个 textarea,单击按钮会更改 textarea 中的文本:
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
的事实。 .
最佳答案
首先,有a regression这影响了这里的代码。这个问题现在解决了。 Threepenny 0.6.0.3 有一个临时修复程序,最终的修复程序将包含在此后的版本中。
pastebin you provided中的代码几乎是正确的。唯一需要更改的是您不需要使用 sink
在按钮单击回调中 - 在您的情况下,sink
应该在行为和文本区域的内容之间建立永久连接,行为值会随着按钮点击事件而变化。
为了完整起见,这是一个完整的解决方案:
{-# LANGUAGE RecursiveDo #-}
module Main where
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 = void $ mdo
return w # set UI.title "Simple example"
listBox <- UI.listBox
(pure ["First", "Second"]) bSelected (pure $ UI.string)
button <- UI.button # set UI.text "Button"
display <- UI.textarea
element listBox # set (attr "size") "10"
getBody w #+ [element listBox, element button, element display]
bSelected <- stepper Nothing $ rumors (UI.userSelection listBox)
let eClick = UI.click button
eValue = fromMaybe "No selection" <$> bSelected <@ eClick
bValue <- stepper "Initial value" eValue
element display # sink UI.text bValue
Behavior (Maybe a)
论据 listBox
不只是设置初始选定值,而是决定了在应用程序的整个生命周期中值的演变。在本例中,facts $ UI.userSelection listBox
只是 bSelected
, 可以通过 the source code of the Widgets
module 验证. (<@)
(或 <@>
如果事件携带您希望使用的数据)。 关于haskell - 基于threepenny-gui中列表框选择的其他元素的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30735436/
使用Threepenny-gui中的“设置文本”,可以给定一个元素和一个字符串,设置该元素的文本: Prelude Graphics.UI.Threepenny.Core> :t set set ::
亲爱的 Haskell 社区,我已经编写了我的第一个 gui 应用程序并决定使用threepenny-gui 来这样做。 任务是在给定文件夹中搜索匹配的文件并提供打开这些文件的链接。此外,由于文件(大
如果我在某些 Element 上使用 delete 函数,我该如何重新创建它们(例如让它们再次出现)? 我查看了示例和文档,但找不到任何可以让我执行此操作的函数,除了 mkElement ,它需要我向
Tab 键将网格中的焦点更改为下一个元素。如何让向上/向下/向左/向右箭头键也起作用? 最佳答案 很简单,您首先确定箭头键值并在 KeyPress 上编写代码并检查键的值并编写适当的代码,然后让我知道
我有一个 Event String我想要 sink进入文本区域。这工作正常,但现在我想将复选框选择的当前值组合到这个字符串。 首先,我通过使用 checkedChange 来做到这一点有效但有问题的复
我正在学习如何使用 Threepenny GUI,我已连接到 Canvas 中的点击事件流,将该事件流映射到 Point 流并将 accumB 应用于 [] 和 Event Point 来获取 Beh
我有一个关于 Threepenny-Gui 与 StateT 交互的问题。考虑这个玩具程序,每次单击按钮时,都会在列表中添加一个“Hi”项目: import Control.Mon
我目前正在努力访问 DragData on UI.drop 时拖动元素的叫做。我有这样的事情: tile do -- How to receive the DragData here? 有人
我尝试安装 Threepenny-gui,但在此过程中可能会损坏一些东西。我的问题是(1)如何解决这个问题,以及(2)当 cabal 发出有关可能重新安装的警告时,应该如何进行? tripenny-g
我是一名优秀的程序员,十分优秀!