我是elm和函数式编程的新手。希望这是一个简单的问题。我想要做的是,当我改变视图时,我希望榆树根据它即将改变的视图来获取记录。我希望我能在基于currentRoute的urlUpdate方法中做到这一点。我有两个视图,一个用于玩家,一个用于特权,两个视图都有独立的命令对象。我试着这样做:
urlUpdate : Result String Route -> Model -> ( Model, Cmd Msg )
urlUpdate result model =
let
currentRoute =
Routing.routeFromResult result
_ =
Debug.log "Current Route" currentRoute
in
if toString currentRoute == "PerksRoute" then
( { model | route = currentRoute }
, Perks.Commands.fetchAll
)
else if toString currentRoute == "PlayersRoute" then
( { model | route = currentRoute }
, Players.Commands.fetchAll
)
else
( { model | route = currentRoute }, Cmd.none )
但是我收到了这个错误:
第一个分支有这种类型:
( { a | route : Route }, Cmd Perks.Messages.Msg )
但第二是:
( { a | route : Route }, Cmd Players.Messages.Msg )
我不确定为什么会发生这种情况,我认为定义此类型就行了。
type Msg
= PlayersMsg Players.Messages.Msg
| PerksMsg Perks.Messages.Msg
以下是完整的src
答案 0 :(得分:0)
您需要使用Cmd.map
将子命令映射到父命令:
if toString currentRoute == "PerksRoute" then
( { model | route = currentRoute }
, Cmd.map PerksMsg Perks.Commands.fetchAll
)
else if toString currentRoute == "PlayersRoute" then
( { model | route = currentRoute }
, Cmd.map PlayersMsg Players.Commands.fetchAll
)