【发布时间】:2018-07-02 20:57:59
【问题描述】:
我正在构建我的第一个 Elm 应用程序,并且我正在根据这些来源构建它:
NoMap approach with Domain focus
这意味着我将我的 Msg 类型从我的主要 Types.elm 映射到我的子函数。做一个简单的onClick 函数时看起来像这样
onClick (MsgForPieChart <| SelectSlice <| sliceModel.points)
现在我想在 init 上获取一些数据以供查看。
我尝试采用与简单 onClick 函数相同的方法
getWarAndPeace : Cmd Msg
getWarAndPeace =
Http.send (MsgForMuseums <| FetchedMuseums) <|
Http.getString "https://example.com/books/war-and-peace.md"
我的主要类型如下所示:
type Msg
= MsgForPieChart Atom.PieChart.Types.Msg
| MsgForMuseums Organism.Museums.Types.Msg
| NoOp
对于http 请求,我的子函数类型看起来像这样
type Msg =
FetchedMuseums (Result Http.Error String)
但无论我尝试什么,我都会不断收到来自 Http.send 或 Task 或任何我尝试的方法的类型错误
Result Http.Error a -> App.Types.Msg
但它是:
App.Types.Msg
我的更新函数的结构如下:
update : App.Types.Msg -> Organism.Museums.Types.MuseumsModel -> Organism.Museums.Types.MuseumsModel
update msgFor model =
case msgFor of
MsgForMuseums msg ->
updateMuseums msg model
_ ->
model
updateMuseums : Organism.Museums.Types.Msg -> Organism.Museums.Types.MuseumsModel -> Organism.Museums.Types.MuseumsModel
updateMuseums msg model =
case msg of
FetchedMuseums data -> model
那么我如何在初始化时为我的子函数获取 http 请求,该函数使用 NoMap 模式来组合 Msg
【问题讨论】:
-
试试
Http.send (MsgForMuseums << FetchedMuseums)? -
这似乎可以解决问题,这让我遇到了另一个问题,我不能从子函数 init 调用
Cmd Msg?然后将其放在我的主初始化中
标签: types functional-programming elm elm-architecture