Elm使用数字形成onInput用法

Jim*_*mbo 1 functional-programming web elm

当我的模型是类型时,onInput工作正常String.但是,如果我希望用户输入IntonInput,则会出现以下错误:

 Function `onInput` is expecting the argument to be:
      String -> msg
  But it is:
      Int -> Msg
Run Code Online (Sandbox Code Playgroud)

这是我的代码

view : Model -> Html Msg
view model =
    div []
        [ input [type_ "text", placeholder "Id", onInput Msgs.NewPlayerId] []
        , input [type_ "text", placeholder "Name", onInput Msgs.NewPlayerName ] []
        , input [type_ "number", placeholder "Level", onInput Msgs.NewPlayerLevel ] []
        , button [ onClick Msgs.Submit ] [ text "submit" ]
        ]
Run Code Online (Sandbox Code Playgroud)

是否有onInput的内置变体接受Ints或Floats?

Cha*_*ert 5

如果你重新定义Msgs.NewPlayerLevel接受a Result String Int来说明玩家可以键入非数字的东西,你可以这样做:

type Msg
    = ...
    | NewPlayerLevel (Result String Int)
Run Code Online (Sandbox Code Playgroud)

你的onInput电话会是:

onInput (NewPlayerLevel << String.toInt)
Run Code Online (Sandbox Code Playgroud)

同样可以做到String.toFloat.

update功能,您将同时处理的OkErr案件为新的消息类型

update msg model =
  case msg of
    ...

    NewPlayerLevel (Ok level) ->
      { model | level = Just level, levelError = Nothing }

    NewPlayerLevel (Err err) ->
      { model | level = Nothing, levelError = Just err }
Run Code Online (Sandbox Code Playgroud)

假设你有这样的模型

type alias Model =
    { ...
    , level : Maybe Int
    , levelError : Maybe String
    }
Run Code Online (Sandbox Code Playgroud)