在 elm 的 urlUpdate 上加载不同的资源

Load different resources on urlUpdate elm

我是 elm 和函数式编程的新手。希望这是一个简单的问题。我想做的是,当我更改视图时,我希望 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 )

但是我得到这个错误:

The 1st branch has this type:

   ( { a | route : Route }, Cmd Perks.Messages.Msg )

But the 2nd is:

   ( { a | route : Route }, Cmd Players.Messages.Msg )

我不确定为什么会这样,我认为将此类型定义为 就可以了。

type Msg
    = PlayersMsg Players.Messages.Msg
    | PerksMsg Perks.Messages.Msg

这是完整的src

您需要使用 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
    )