Elm:将值从更新功能传递到传出端口
Elm : Pass value to outgoing port from the update function
我有一个更新功能,可以将 Answer
添加到 Question
一旦问题更新为答案,我想将其发送到传出端口,同时也更新我的模型。
port emitQuestion : Question -> Cmd msg
update msg model =
AnswerQuestion answer ->
case model.question of
Nothing ->
( model, Cmd.none)
Just question ->
let
updatedQuestion =
{ question | answer = Just answer }
in
( { model | question = updatedQuestion } , Cmd.none)
在这种情况下,我如何将 updatedQuestion
传递给 emitQuestion
?
你定义了传出端口签名,但没有正文,像这样:
port questionUpdated : Question -> Cmd msg
(假设您有 Question
类型或别名;您的问题未指定)
然后,在调用 javascript 中,您在调用 Elm init
后定义端口处理程序:
var app = Elm.Main.init({ node: document.querySelector('main') })
app.ports.questionUpdated.subscribe(function(data) {
// your javascript for handling updated question
});
要在更新时将新问题值传递给端口,只需将其传递到 return 类型的第二个值中 update
:
( { model | question = updatedQuestion } , questionUpdated updatedQuestion )
我有一个更新功能,可以将 Answer
添加到 Question
一旦问题更新为答案,我想将其发送到传出端口,同时也更新我的模型。
port emitQuestion : Question -> Cmd msg
update msg model =
AnswerQuestion answer ->
case model.question of
Nothing ->
( model, Cmd.none)
Just question ->
let
updatedQuestion =
{ question | answer = Just answer }
in
( { model | question = updatedQuestion } , Cmd.none)
在这种情况下,我如何将 updatedQuestion
传递给 emitQuestion
?
你定义了传出端口签名,但没有正文,像这样:
port questionUpdated : Question -> Cmd msg
(假设您有 Question
类型或别名;您的问题未指定)
然后,在调用 javascript 中,您在调用 Elm init
后定义端口处理程序:
var app = Elm.Main.init({ node: document.querySelector('main') })
app.ports.questionUpdated.subscribe(function(data) {
// your javascript for handling updated question
});
要在更新时将新问题值传递给端口,只需将其传递到 return 类型的第二个值中 update
:
( { model | question = updatedQuestion } , questionUpdated updatedQuestion )