Types 视图列表中的Elm不匹配
。。。Elm中的where列表需要同质,但我不明白的是为什么Types 视图列表中的Elm不匹配,types,elm,Types,Elm,。。。Elm中的where列表需要同质,但我不明白的是为什么Html(YouTubeUrl->Msg)是urlInput的类型签名。我想这与我在Submit上使用的有关 我是个榆树新手,所以我不确定我做错了什么。没有任何类似于我看到的Html(a->Msg)的类型示例 elm 0.18问题源于您对的使用,其签名如下: onSubmit:msg->Attribute msg 您正在向它传递一个构造函数,UpdateYouTubeUrl,它接受一个参数。要使用UpdateYouTubeUrl生成
Html(YouTubeUrl->Msg)
是urlInput
的类型签名。我想这与我在Submit上使用的有关
我是个榆树新手,所以我不确定我做错了什么。没有任何类似于我看到的Html(a->Msg)
的类型示例
elm 0.18
问题源于您对的使用,其签名如下:
onSubmit:msg->Attribute msg
您正在向它传递一个构造函数,UpdateYouTubeUrl
,它接受一个参数。要使用UpdateYouTubeUrl
生成Msg
,必须传递类型为YouTubeUrl
的参数。没有传递该参数,因此Elm的编译器告诉您,urlement
函数需要一个YouTubeUrl
参数
我的直觉是您打算使用onInput
,它接受字符串值作为输入,您可以通过获取输入的targetValue来使用它。另外,onSubmit
通常在包装输入的表单元素上运行
在大多数情况下,如果Elm编译器告诉您它正在寻找返回值为Html(a->msg)
的视图函数,这可能意味着您错过了函数中的某个参数,因为您的视图通常应为Html msg
类型(当然,更高级的情况除外)。Ahh,我现在明白了。我打算把onSubmit
包装成一个表单,因为我不想启动onInput
,而是要按Enter键;我想最简单的方法就是挂接onSubmit
。你介意发布一个如何使用onSubmit
的示例吗?
type Msg
= NoOp
| RequestDate
| ReceiveDate Date
| UpdateYouTubeUrl YouTubeUrl
-- -
root : Maybe YouTubeUrl -> Html Msg
root youTubeUrl =
case youTubeUrl of
Just youTubeUrl ->
div []
[ player youTubeUrl
, urlInput
]
Nothing ->
urlInput
player : YouTubeUrl -> Html Msg
player youTubeUrl =
h1 [] [ text ("YouTube player for " ++ youTubeUrl ++ " goes here") ]
urlInput : Html (YouTubeUrl -> Msg)
urlInput =
input
[ placeholder "(Enter a YouTube embed URL and hit <Enter>)"
, onSubmit UpdateYouTubeUrl
]
[]
-- TYPE MISMATCH ---------------------------------- ./src/YouTubePlayer/View.elm
The 1st and 2nd entries in this list are different types of values.
28| [ player youTubeUrl
29|> , urlInput
30| ]
The 1st entry has this type:
Html (Msg)
But the 2nd is:
Html (YouTubeUrl -> Msg)
Hint: It looks like a function needs 1 more argument.
Hint: Every entry in a list needs to be the same type of value. This way you
never run into unexpected values partway through. To mix different types in a
single list, create a "union type" as described in:
<http://guide.elm-lang.org/types/union_types.html>
Detected errors in 1 module.
[ Html Msg
, Html (YouTubeUrl -> Msg)
]