Elm:将值从更新功能传递到传出端口

时间:2018-10-12 22:30:23

标签: elm ffi elm-port

我有一个将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

1 个答案:

答案 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 )