私のアプリケーションはルーティングのためにNavigateを使用しますが、何らかの理由で最初のhttpコマンドがいずれかのサブモジュールに対して起動していません。親モジュールと子モジュールの間にコマンドが配線される方法に何か問題がある可能性がありますが、問題を特定するための助けを借りることができます。コードと構造は、elm-taco(https://github.com/ohanhi/elm-taco)の例をモデルにしています。以下は、コードの関連部分の抜粋であり、コンパイラエラーはありません。Elmサブモジュールのinitコマンドが起動しない
Main.elm
init : Flags -> Location -> (AppModel, Cmd Msg)
init flags location =
( startModel
, Http2.get ("localhost:4000/graphql?query=" ++ encoded) HandleLogDataResponse decoder)
update : Msg -> AppModel -> (AppModel, Cmd Msg)
update msg model =
case msg of
HandleLogDataResponse webData ->
updateLogData model webData
RouterMsg routerMsg ->
updateRouter model routerMsg
updateLogData : AppModel -> WebData LogData -> (AppModel, Cmd Msg)
updateLogData model webData =
case webData of
Success logdata ->
case model.appState of
NotReady time ->
let
initTaco =
{ currentTime = time
, logdata = logdata
}
(initRouterModel, routerCmd) =
Router.init initTaco model.location
in
({ model | appState = Ready initTaco initRouterModel }
, Cmd.map RouterMsg routerCmd
)
Ready taco routerModel ->
({ model | appState = Ready (updateTaco taco (UpdateLogData logdata)) routerModel }
, Cmd.none
)
Router.elm
init : Taco -> Location -> (Model, Cmd Msg)
init taco location =
let
(chatModel, chatCmd) =
Chat.initModel taco
in
({ chatModel = chatModel
, route = parseLocation location}
, Cmd.map ChatMsg chatCmd
)
update: Msg -> Model -> (Model,Cmd Msg, TacoUpdate)
update msg model =
case msg of
ChatMsg chatMsg ->
updateChat model chatMsg
updateChat : Model -> Chat.Msg -> (Model, Cmd Msg, TacoUpdate)
updateChat model chatMsg =
let
(nextChatModel, chatCmd, tacoUpdate) =
Chat.update chatMsg model.chatModel
in
({model | chatModel = nextChatModel }
, Cmd.map ChatMsg chatCmd
, tacoUpdate)
Chat.elm
ご回答いただきありがとうございます。私はChat.elmの 'init'がRouter.elmの' init'とMain.elmのupdateLogDataを介して 'main'に到達したと考えました。これはMainのinit/HandleLogDataResponseによって呼び出されます。これは基本的に 'elm-taco'の例です。 –
ああ、申し訳ありません.Httpハンドラで実際にinitを呼び出すという事実は忘れました。 メッセージの周りに 'Debug.log'を追加して、何が起きているのかを見てください。たぶん 'Http2.get'リクエストが失敗し、' Router.init'が評価されるブランチには決して行きません。 – pdamoc
http要求は成功します。私はデバッグしようとします。ログ。ありがとう –