У меня возникла проблема с обновлением модели из ответа JSON через одно из моих действий. Вот установка:Elm update model from json response
У меня есть модели, выглядит следующим образом:
type alias Model =
{ totals: Totals.Total // all values are initialized as 0 or 0.0
}
-- In other module
type alias Total =
{ days : Int
, avgPerDay: Float
, reports : Int
, people : Int
, locations : Int
, totalCoffees : Int
, coffeesPerDay: Float
}
Декодер для указанной модели:
decodeTotal : Json.Decoder Total
decodeTotal =
object7 Total
("days" := Json.int)
("avgPerDay" := Json.float)
("reports" := Json.int)
("people" := Json.int)
("locations" := Json.int)
("totalCoffees" := Json.int)
("coffeesPerDay" := Json.float)
Чтобы обновить модель, следующий запрос Http называется:
getTotals : Effects Action
getTotals =
Http.get Totals.decodeTotal ("/reports/totals")
|> Task.toMaybe
|> Task.map TotalsFetched
|> Effects.task
Отклик сервера 200 OK с этим телом: {"days":347,"reports":1793,"avgPerDay":5.167147,"people":205,"locations":332,"coffees":146,"coffeesPerDay":0.42074928}
Однако в TotalsFetched
действий:
update : Action -> Model -> (Model, Effects Action)
update action model =
case action of
TotalsFetched totals ->
log (toString totals) -- logs Nothing
({ model | totals = Maybe.withDefault model.totals totals }
, Effects.none
)
Я предполагаю, что, поскольку totals
является Nothing
моя модель просто остается, как описано в Maybe.withDefault
Я не понимаю, почему totals
не ничего вместо декодированного ответа с сервера. Это мой первый проект вяза, поэтому я не удивлюсь, если я убью что-то действительно очевидное для обученного глаза.
Это было. Спасибо, что заметили крошечную ошибку и предложение использовать 'Task.toResult'. Безмолвная неудача затруднила это. – sambev