在urlUpdate elm上加载不同的资源

时间:2016-09-02 19:37:27

标签: 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 )

但是我收到了这个错误:

  

第一个分支有这种类型:

   ( { 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

1 个答案:

答案 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
    )