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
おかげで、それが動作します!あなたはそれが何をしているのかを説明してください、私はドキュメントを見ていて、それでも私の頭を包み込むことはできません。 Cmd.mapの署名は(a - > msg) - > Cmd a - > Cmd msgです。最初の引数は関数ではないPlayersMsgですか? – smogger914
'PlayersMsg'と' PerksMsg'は両方ともタイプコンストラクタであり、それぞれが単一の引数をとり、 'Messages.Msg'値を返します。型コンストラクタはこの意味で関数と考えることができ、そのため、最初のパラメータとして 'Cmd.map'に収まるのです。 –
Gotcha、それは意味タイプメッセージを見て = PlayersMsg Players.Messages.Msg | PerksMsg Perks.Messages.Msg | PicturesMsg Pictures.Messages.Msg | NavMsg Components.Nav.Messages.Msg'!情報をありがとう。 – smogger914