我遇到了通过我的某个操作从JSON响应更新模型的问题。 这是设置:
我的模型看起来像这样:
ddply(df, .(id1), function(x) { wilcox.test(x~id2, data=x, paired=FALSE)$p.value })
id1 V1
1 1 0.3095238
2 2 1.0000000
3 3 0.8412698
4 4 0.6904762
5 5 0.3095238
所述模型的解码器:
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
}
要更新模型,将调用以下Http请求:
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)
来自服务器的响应是200 OK,使用此正文:getTotals : Effects Action
getTotals =
Http.get Totals.decodeTotal ("/reports/totals")
|> Task.toMaybe
|> Task.map TotalsFetched
|> Effects.task
然而,在{"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
是Nothing而不是来自服务器的Decoded响应。这是我的第一个榆树项目,所以如果我遗漏了一些对训练有素的眼睛显而易见的东西,我不会感到惊讶。
答案 0 :(得分:1)
当你的解码器正在寻找coffees
时,你的json正在返回一个名为totalCoffees
的字段。
您可能需要考虑使用Task.toResult
而不是Task.toMaybe
,因为这会在出现问题时收到错误消息。