Jim*_*mbo 1 functional-programming web elm
当我的模型是类型时,onInput工作正常String
.但是,如果我希望用户输入Int
onInput,则会出现以下错误:
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?
如果你重新定义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
功能,您将同时处理的Ok
与Err
案件为新的消息类型
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)