Elm: передать значение в исходящий порт из функции обновления

У меня есть функция обновления, которая добавляет 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 ответ

Решение

Вы определяете подпись исходящего порта, но без тела, как это:

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 )
Другие вопросы по тегам