私はElmを勉強しようとしており、スケーラブルなアプリケーションを設計するための最良の方法を試しています。ルーティングに関しては、現在のroute
に応じてさまざまなビューをレンダリングするシンプルなロジックが必要です。単純なロジックを重視します。しかし、私の見解の中には、モデルに応じてルートを変更したいと思っています。たとえば、私のPlayers
ビューでは、サーバーからデータを受信した場合にのみレンダリングしたいと考えています。要求が保留中または失敗している場合は、エラーページを表示したいと思います。 Players
ビュー内でこのロジックを実行できることは分かっていますが、メッセージをモデルに送信してルートを別のビューに変更することをお勧めします。私はイベント(onClick
など)からのメッセージをディスパッチする方法しか知りません。これは可能ですか、私は言語のデザインの外で働いていますか?elm(イベントなし)にメッセージをディスパッチする方法
これは私の現在の設定ですが、私は選手がを見るルート
コアビューを変更するメッセージ
view : Model -> Html Msg
view model =
div []
[ page model
]
page : Model -> Html Msg
page model =
case model.route of
PlayersRoute ->
listView model.playersModel.players
PlayerRoute id ->
editView model id
NotFoundRoute ->
notFoundView
を派遣する
Nothing ->
notFoundView
を変更したいです
editView : Model -> PlayerId -> Html Msg
editView model id =
case model.playersModel.players of
NotAsked ->
text ""
Loading ->
text "Loading ..."
Failure err ->
text (toString err)
Success players ->
let
maybePlayer =
players
|> List.filter(\player -> player.id == id)
|> List.head
in
case maybePlayer of
Just player ->
core player
Nothing ->
notFoundView
ありがとうございました!
ありがとうございました!遅刻して申し訳ありませんが、私はこれを避けることを望んでいましたが、私はそれを回避する方法を見つけたことはありませんでした。 – Right2Drive