This page covers Elm 0.18
ナビゲーション
次に、ビュー間を移動するためのボタンを追加しましょう。
EditPlayerメッセージ
src/Players/Messages.elmに2つの新しいアクションを追加するように変更してください:
...
type Msg
= OnFetchAll (Result Http.Error (List Player))
| ShowPlayers
| ShowPlayer PlayerId
ShowPlayers
とShowPlayer
を追加しました。
プレーヤーリスト
プレイヤーのリストは、各プレイヤーが ShowPlayer
メッセージをトリガーするためのボタンを表示する必要があります。
まず、src/Players/List.elmにHtml.Events
を追加してください:
import Html.Events exposing (onClick)
このボタンの最後に新しい機能を追加します:
editBtn : Player -> Html Msg
editBtn player =
button
[ class "btn regular"
, onClick (ShowPlayer player.id)
]
[ i [ class "fa fa-pencil mr1" ] [], text "Edit" ]
ここでは、編集したいプレイヤーのIDで ShowPlayer
をトリガーします。
そして、このボタンを含むように playerRow
を変更してください:
playerRow : Player -> Html Msg
playerRow player =
tr []
[ td [] [ text (toString player.id) ]
, td [] [ text player.name ]
, td [] [ text (toString player.level) ]
, td []
[ editBtn player ]
]
プレイヤー編集
編集ビューにナビゲーションボタンを追加しましょう。 /src/Players/Edit.elmで:
1つ以上のインポートを追加します:
import Html.Events exposing (onClick)
リストボタンの最後に新しい関数を追加します:
listBtn : Html Msg
listBtn =
button
[ class "btn regular"
, onClick ShowPlayers
]
[ i [ class "fa fa-chevron-left mr1" ] [], text "List" ]
ここでは、ボタンをクリックすると ShowPlayers
を送ります。
そしてこのボタンをリストに追加し、 nav
関数を以下のように変更します:
nav : Player -> Html Msg
nav model =
div [ class "clearfix mb2 white bg-black p1" ]
[ listBtn ]
プレーヤーの更新
最後に、src/Players/Update.elmは新しいメッセージに応答する必要があります。
import Navigation
そして、2つの新しい枝をcase式に追加します。
update : Msg -> List Player -> ( List Player, Cmd Msg )
update message players =
case message of
...
ShowPlayers ->
( players, Navigation.newUrl "#players" )
ShowPlayer id ->
( players, Navigation.newUrl ("#players/" ++ id) )
Navigation.newUrl
はコマンドを返します。 Elmがこのコマンドを実行すると、ブラウザの閲覧ロケーションが変わります。
テストする
http://localhost:3000/#players
のリストに行きます。編集ボタンが表示されます。クリックすると、その場所が編集ビューに変わります。
これまでのアプリケーションコードはhttps://github.com/sporto/elm-tutorial-app/tree/018-07-navigationになります。