我有一个将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
?
答案 0 :(得分:2)
您可以定义传出端口签名,但不使用主体,例如:
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
});
要将新的问题值传递给更新时的端口,只需将其传递给来自update
的返回类型的第二个值:
( { model | question = updatedQuestion } , questionUpdated updatedQuestion )