Elm中具有onInput的几个输入和参数

Elm中具有onInput的几个输入和参数,elm,Elm,我正在用榆树做一点实验。现在我在屏幕上有几个输入范围,我想单独控制它们的值,但我不知道如何区分它们(在Js中,我会在onInput回调上发送输入的ID和值),因为我只能用Elm的onInput发送一个参数 inp : Input -> Html Msg inp inp = div [ class "input" ] [ p [] [ text inp.name ] , input [ id (toString inp.id), type' "rang

我正在用榆树做一点实验。现在我在屏幕上有几个输入范围,我想单独控制它们的值,但我不知道如何区分它们(在Js中,我会在onInput回调上发送输入的ID和值),因为我只能用Elm的onInput发送一个参数

inp : Input -> Html Msg
inp inp =
    div [ class "input" ]
        [ p [] [ text inp.name ]
        , input [ id (toString inp.id), type' "range", value inp.volume, onInput ChangeInput ] []
        , controls inp.name inp.id
        ]

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        Play id ->
            ( play model id, Cmd.none )

        ChangeInput id value ->
            -- Here I want to grab the id and the value coming from the input --

        NoOp ->
            ( model, Cmd.none )
有什么帮助吗?
谢谢

使用部分应用程序:
onInput您的消息定义应该是:

type Msg =
  ...
  | ChangeInput Id String
这给它一个签名
(Id->String->Msg)
。 它接受
Id
String
并返回
Msg
。消息包括id和字符串

您可以通过在视图中进行以下更改来提供自己的附加参数:

onInput (ChangeInput id)
公式
(ChangeInput id)
是一个部分应用程序:

您不提供所有参数,而只提供一个参数,因此结果将是一个函数,该函数接受其余参数,并输出
Msg
类型


您已经为消息
(Id->String->Msg)
提供了
Id
,因此剩余的签名将是
(String->Msg)
,这正是
onInput
所要寻找的。

定义联合类型时,您将同时定义:类型注释定义和值构造函数

type Msg
=NoOp
|SomeMessage Int字符串
联合类型注释定义 在这里,您将使用
Msg
为以下函数定义类型注释定义:

update:Msg->Model->(Model,Cmd-Msg)
联合类型值构造函数 然后,您将使用
NoOp
SomeMessage
作为
Msg

下面是一个函数示例,它构造一个
SomeMessage
值并返回它:

createSomeMessage:Int->Msg
createSomeMessage编号=
“你好!”
createSomeMessage 1--SomeMessage 1“你好!”
具有部分应用程序的联合类型值构造函数 Elm支持部分应用程序,这意味着您可以等待
Msg
type的值的构造,直到您拥有所有必需的参数

以下是它的工作原理:

--部分应用的值构造函数,需要新参数
messageWithId:String->Msg
messageWithId=
消息1
{-稍后在视图中,(SomeMessage 1)将等待来自
输入DOM事件
-}
输入[onInput messageWithId][]
--表达同一事物的另一种方式:
输入[onInput(SomeMessage 1)][]
上面的示例显示了如何在DOM事件触发之前使用值构造函数应用一些参数。这将导致生成一条消息,其中包含来自部分应用函数和事件本身的数据


这里有一种被描述的实用技术。

编译器这样说:(a但正确的参数是:Msg@Trajan你能粘贴涉及
ChangeInput
的类型定义吗?正如@wintvelt所写的那样,你的Msg定义是否包含
ChangeInput Id字符串
?这就是问题所在,定义:)