Elm: передать значение в исходящий порт из функции обновления - PullRequest
0 голосов
/ 13 октября 2018

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

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

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 )
...