榆树输入中带有额外变量的消息
Msg's with extra variables in elm inputs
我正在尝试将 Elm (0.18) 中的 Msg
值划分为不同的类型。我希望它符合这种类型:
type MsgSession
= LogIn
| LogOut
type MsgSettings
= SetUsername String
= SetPassword String
type Msg
= SessionMsg MsgSession
| SettingsMsg MsgSettings
...
我的更新函数如下所示:
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
SessionMsg sessionMsg ->
sessionUpdate sessionMsg model
SettingsMsg settingsMsg ->
settingsUpdate settingsMsg model
...
...这意味着我还必须定义子更新...
sessionUpdate : MsgSession -> Model -> ( Model, Cmd Msg )
sessionUpdate msg model =
case msg of
LogIn ->
-- do stuff
LogOut ->
-- do stuff
我的注销事件看起来像这样,并且工作正常:
button [onClick (SessionMsg LogOut)] [text "Log Out"]
但是一旦事件涉及变量,就不行了。我对 settingsUpdate
:
有类似的设置
settingsUpdate : MsgSettings -> Model -> ( Model, Cmd Msg )
settingsUpdate msg model =
case msg of
SetUsername string ->
...
SetPassword string ->
...
但我无法让 onInput
作为变量发送。例如,这段代码
input [onInput SettingsMsg SetUsername] []
产生此错误:
Function `onInput` is expecting 1 argument, but was given 2.
483| onInput SettingsMsg SetUsername
括号也不起作用。
input [onInput (SettingsMsg SetUsername)] []
产量
The argument to function `SettingsMsg` is causing a mismatch.
483| SettingsMsg SetUsername)
^^^^^^^^^^^
Function `SettingsMsg` is expecting the argument to be:
MsgSettings
But it is:
String -> MsgSettings
我必须将什么传递给 onInput
才能使这项工作正常进行?
你应该可以使用组合:
input [onInput (SettingsMsg << SetUsername)] []
如果您更习惯使用显式 lambda,则看起来像这样:
input [onInput (\name -> SettingsMsg (SetUsername name))] []
我正在尝试将 Elm (0.18) 中的 Msg
值划分为不同的类型。我希望它符合这种类型:
type MsgSession
= LogIn
| LogOut
type MsgSettings
= SetUsername String
= SetPassword String
type Msg
= SessionMsg MsgSession
| SettingsMsg MsgSettings
...
我的更新函数如下所示:
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
SessionMsg sessionMsg ->
sessionUpdate sessionMsg model
SettingsMsg settingsMsg ->
settingsUpdate settingsMsg model
...
...这意味着我还必须定义子更新...
sessionUpdate : MsgSession -> Model -> ( Model, Cmd Msg )
sessionUpdate msg model =
case msg of
LogIn ->
-- do stuff
LogOut ->
-- do stuff
我的注销事件看起来像这样,并且工作正常:
button [onClick (SessionMsg LogOut)] [text "Log Out"]
但是一旦事件涉及变量,就不行了。我对 settingsUpdate
:
settingsUpdate : MsgSettings -> Model -> ( Model, Cmd Msg )
settingsUpdate msg model =
case msg of
SetUsername string ->
...
SetPassword string ->
...
但我无法让 onInput
作为变量发送。例如,这段代码
input [onInput SettingsMsg SetUsername] []
产生此错误:
Function `onInput` is expecting 1 argument, but was given 2.
483| onInput SettingsMsg SetUsername
括号也不起作用。
input [onInput (SettingsMsg SetUsername)] []
产量
The argument to function `SettingsMsg` is causing a mismatch.
483| SettingsMsg SetUsername)
^^^^^^^^^^^
Function `SettingsMsg` is expecting the argument to be:
MsgSettings
But it is:
String -> MsgSettings
我必须将什么传递给 onInput
才能使这项工作正常进行?
你应该可以使用组合:
input [onInput (SettingsMsg << SetUsername)] []
如果您更习惯使用显式 lambda,则看起来像这样:
input [onInput (\name -> SettingsMsg (SetUsername name))] []