Получил, надеюсь, простую проблему. Когда я получаю действие A в моей функции обновления, я хотел бы вернуть задачу, которая выполняет некоторые действия, а затем приводит к действию B, которое снова принимается функцией обновления. Насколько я понимаю, любые эффекты, возвращаемые из Update, будут выполняться startapp, но, похоже, ничего не происходит. Вот сокращенный пример:

import StartApp exposing (start)
import Effects
import Task
import Html exposing (..)
import Html.Events exposing (..)

main =
  (start
    { init = init
    , update = update
    , view = view
    , inputs = []
    }).html


type Action
    = Click
    | Dummy

type alias Model =
    { clicks: Int
    }


init : (Model, Effects.Effects Action)
init = (Model 0, Effects.none)

update : Action -> Model -> (Model, Effects.Effects Action)
update action model =
  case action of
    Click ->
      -- the click is received.
      (model, Effects.task (Task.succeed Dummy))
    Dummy ->
      -- this never happens!!
      ({ model | clicks = model.clicks + 1}, Effects.none)


view : Signal.Address Action -> Model -> Html
view address model =
  let start = button [ onClick address Click ] [ text (toString model.clicks) ]
  in
      div [] ([start])

Bzzt

Ответов: 1

Ответы (1)

StartApp требует порта для задач в дополнение к main. Измените свою функцию main и добавьте порт tasks следующим образом, и все будет готово:

приложение =
  Начало
    {init = init
    , update = обновить
    , view = просмотр
    , input = []
    }

main =
  app.html

задачи порта: Сигнал (Task.Task Effects.Never ())
портовые задачи =
  app.tasks

2022 WebDevInsider