2016-09-02 5 views
0

elmと関数型プログラミングの新機能です。これは簡単な質問です。私がしようとしていることは、ビューを変更するときに、elmが変更しようとしているビューに基づいてレコードを取得するようにしたいということです。私はcurrentRouteに基づいてurlUpdateメソッドでそれを実行できることを期待していました。私はプレイヤーとペルクスの2つのビューを持っており、どちらも独立したコマンドオブジェクトを持っています。私はこのエラーを取得するしかしurlUpdate elmで別のリソースをロード

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) 

私はなぜこれが起こっているかわからない、私はで定義されたこのタイプを持つことだろうと思うだろうOK。ここで

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

あなたは親に子コマンドをマッピングするためにCmd.mapを使用する必要がフルsrc

答えて

0

です:答えのための

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 
    ) 
+0

おかげで、それが動作します!あなたはそれが何をしているのかを説明してください、私はドキュメントを見ていて、それでも私の頭を包み込むことはできません。 Cmd.mapの署名は(a - > msg) - > Cmd a - > Cmd msgです。最初の引数は関数ではないPlayersMsgですか? – smogger914

+0

'PlayersMsg'と' PerksMsg'は両方ともタイプコンストラクタであり、それぞれが単一の引数をとり、 'Messages.Msg'値を返します。型コンストラクタはこの意味で関数と考えることができ、そのため、最初のパラメータとして 'Cmd.map'に収まるのです。 –

+0

Gotcha、それは意味タイプメッセージを見て = PlayersMsg Players.Messages.Msg | PerksMsg Perks.Messages.Msg | PicturesMsg Pictures.Messages.Msg | NavMsg Components.Nav.Messages.Msg'!情報をありがとう。 – smogger914

関連する問題