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 )