如何使用字段在榆树0.13(How to use Fields in Elm 0.13)

2019-10-21 11:36发布

我一直在试图让田里工作,但保留失败。 我也一直试图寻找例子,但唯一的例子我能找到使用榆树0.14,它使用新的通道API这是不是在榆树0.13可用。

所以,我从所提供的例子开始目录

import Graphics.Input.Field (..)
import Graphics.Input (..)

name : Input Content
name = input noContent

nameField : Signal Element
nameField = field defaultStyle name.handle identity "Name" <~ name.signal

而为了使用字段我试着

main : Signal Element
main = Signal.lift2 display Window.dimensions gameState

display : (Int,Int) -> GameState -> Element
display (w,h) g =
    container w h middle <|
        collage gameWidth gameHeight
            (if  | g.state == Menu ->
                    [ rect gameWidth gameHeight
                        |> filled black
                    , toForm nameField
                    , plainText "*The name entered in the nameField*"
                    ]
                | otherwise -> []
            )

不过,我不断收到以下错误

Expected Type: Signal.Signal Graphics.Element.Element
Actual Type: Graphics.Element.Element

为什么不是元素的信号了......函数定义明确规定它应该输出的信号,对不对? 我现在怎么就能够输入一个名称,那我就再能在变量中使用?

Answer 1:

榆树0.13有一些烦人的困惑类型的错误消息。 预计/实际通常交换。 在这种情况下的问题来自使用nameField : Signal Elementdisplay : (Int,Int) -> GameState -> Elementdisplay是一个纯粹的(无信号)的功能,但要纯,你不能在任何地方在那里使用的信号。 为了解决这个问题,扯起nameField信号升了一级,到main 。 使用什么是在字段中输入,使用输入信号:

main : Signal Element
main = Signal.lift4 display Window.dimensions gameState name.signal

nameField : Content -> Element
nameField = field defaultStyle name.handle identity "Name"

display : (Int,Int) -> GameState -> Content -> Element
display (w,h) g currentContent =
    container w h middle <|
        collage gameWidth gameHeight
            (if  | g.state == Menu ->
                    [ rect gameWidth gameHeight
                        |> filled black
                    , toForm (nameField currentContent) -- use something other than `currentContent` here to influence the field content. 
                    , plainText currentContent.string
                    ]
                | otherwise -> []
            )


文章来源: How to use Fields in Elm 0.13