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 )