Parsing 如何在Elm中将html输入解码为int?

Parsing 如何在Elm中将html输入解码为int?,parsing,input,decode,elm,Parsing,Input,Decode,Elm,有html输入。我们监听输入事件并更新模型(这里是简单的字符串)。现在我想对模型使用Int类型,并从输入值解析Int。我制作了另一个解码器,并将初始模型的值更改为0。在这些更改之后,当我键入数字时,模型不会更改。为什么?如何实施 import Html exposing (input, div, text) import Html.Events import StartApp.Simple import Json.Decode model = "" view address model =

有html输入。我们监听输入事件并更新模型(这里是简单的字符串)。现在我想对模型使用Int类型,并从输入值解析Int。我制作了另一个解码器,并将初始模型的值更改为0。在这些更改之后,当我键入数字时,模型不会更改。为什么?如何实施

import Html exposing (input, div, text)
import Html.Events
import StartApp.Simple
import Json.Decode

model = ""

view address model =
  let

    decoder =
      Html.Events.targetValue

    -- this decoder doesn't work
    decoderInt =
      Json.Decode.at ["target", "value"] Json.Decode.int

  in
    div [] [
      input [ Html.Events.on "input" decoder (Signal.message address) ] [],
      text (toString model)
    ]

update action model =
  action

main =
  StartApp.Simple.start { model = model, view = view, update = update }

Json解码不起作用,因为Json值是字符串,即使字符串中的值是数字。例如,Json值如下所示:

{“目标”:{“值”:“42”}
Elm的Json解码函数非常严格,因此它们将把
“42”
仅仅看作一个字符串。您需要进一步构建一个解码器,将该字符串的内部解析为一个数字——如果用户键入非数字的内容,这一操作可能会失败

为此,我们可以切换回最初使用
Html.Events.targetValue
解码器,因为它知道如何解码字符串值。然后我们通过
Json.Decode.将其传递,然后
取出该字符串的值并执行操作

解码打印=
Html.Events.targetValue`Json.Decode.and`\str->
的case String.toInt str
好的,我->
Json.Decode.i
错误消息->
Json.Decode.fail msg

使用
succeed
fail
将值映射回
Decoder Int

Json解码不起作用,因为Json值是字符串,即使字符串中的值是数字。例如,Json值如下所示:

{“目标”:{“值”:“42”}
Elm的Json解码函数非常严格,因此它们将把
“42”
仅仅看作一个字符串。您需要进一步构建一个解码器,将该字符串的内部解析为一个数字——如果用户键入非数字的内容,这一操作可能会失败

为此,我们可以切换回最初使用
Html.Events.targetValue
解码器,因为它知道如何解码字符串值。然后我们通过
Json.Decode.将其传递,然后
取出该字符串的值并执行操作

解码打印=
Html.Events.targetValue`Json.Decode.and`\str->
的case String.toInt str
好的,我->
Json.Decode.i
错误消息->
Json.Decode.fail msg
使用
succeed
fail
将值映射回
解码器Int
的类型