2
elm tutorial에 대한 삭제 플레이어 메소드가 성공적으로 구현되었습니다. 그러나 서버에서 플레이어를 다시 얻는 메시지를 ForchFetch
msg를 통해 수동으로 보내지 않고도 모델을 업데이트 할 수 없습니다.elm 모델의 값 삭제
내 삭제 버튼 :
deleteBtn : Player -> Html.Html Msg
deleteBtn player =
let
message =
Msgs.Delete player
in
a
[ class "btn regular", onClick message]
[ i [ class "fa fa-pencil mr1" ] [], text "Delete" ]
내 삭제 메시지 :
type Msg =
| Delete Player
| OnDeletePlayer (Result Http.Error Player)
| ForceFetch
| OnFetchPlayers (WebData (List Player))
내 업데이트 기능 :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
Msgs.ForceFetch ->
(model, fetchPlayers)
Msgs.OnFetchPlayers response ->
({ model | players = response }, Cmd.none)
Msgs.Delete player ->
(model, deletePlayerCmd player)
Msgs.OnDeletePlayer (Ok player) ->
(updateDeletedPlayerList model player, Cmd.none)
Msgs.OnDeletePlayer (Err player) ->
(model, Cmd.none)
updateDeletedPlayerList : Model -> Player -> Model
updateDeletedPlayerList model deletedPlayer =
let
updatedPlayers = RemoteData.map (List.filter (\p -> deletedPlayer /= p)) model.players
in
{ model | players = updatedPlayers}
deletePlayerCmd : Player -> Cmd Msg
deletePlayerCmd player =
Http.send Msgs.OnDeletePlayer (deletePlayerRequest player)
deletePlayerRequest : Player -> Http.Request Player
deletePlayerRequest player =
Http.request
{ body = Http.emptyBody
, expect = Http.expectJson playerDecoder
, headers = []
, method = "DELETE"
, timeout = Nothing
, url = savePlayerUrl player.id
, withCredentials = False
}
fetchPlayers : Cmd Msg
fetchPlayers =
Http.get fetchPlayersUrl playersDecoder
|> RemoteData.sendRequest
|> Cmd.map Msgs.OnFetchPlayers
그리고 좋은 측정을위한 내 모델 :
이 내 코드입니다type alias Model =
{ players : WebData (List Player)
, route : Route
, newPlayerName : String
, newPlayerId : String
, newPlayerLevel : Int
}
편집 :
내가 성공하지 다음과 같은 방식으로 fetchPlayers
을 통합 시도했다 :
Msgs.OnDeletePlayer (Ok player) ->
(updateDeletedPlayerList model player, fetchPlayers)
'ForceFetch'가 작동하는 경우 편집에 실패한 이유가 표시되지 않습니다. 응답이 '오류'가 아닌 '확인'으로 끝나야합니까? – Dogbert
해결되었으므로 곧 답변을 업데이트하겠습니다. – Jimbo
필터에서 플레이어 레코드를 비교하는 경우 서버에서 얻은 것과 일치하지 않을 수 있습니다. player.id 만 비교하면됩니다. – Sebastian