Ich habe erfolgreich eine Delete-Player-Methode für die elm tutorial implementiert. Allerdings kann ich das Modell nicht aktualisieren, ohne manuell eine ForchFetch
msg (über einen Klick auf eine Schaltfläche) zu senden, die die Spieler vom Server wieder holt. Dies ist mein Code:Löschen von Werten aus Ulme Modell
Meine Schaltfläche Löschen:
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" ]
Meine löschen Nachrichten:
type Msg =
| Delete Player
| OnDeletePlayer (Result Http.Error Player)
| ForceFetch
| OnFetchPlayers (WebData (List Player))
Meine Update-Funktion:
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
Und für eine gute Maßnahme mein Modell:
type alias Model =
{ players : WebData (List Player)
, route : Route
, newPlayerName : String
, newPlayerId : String
, newPlayerLevel : Int
}
Edit:
ich ohne Erfolg versucht haben fetchPlayers
auf folgende Weise mit eingebautem
Msgs.OnDeletePlayer (Ok player) ->
(updateDeletedPlayerList model player, fetchPlayers)
Wenn 'ForceFetch' funktioniert, sehe ich nicht, warum Ihr Versuch in Ihrer Bearbeitung nicht funktioniert. Sind Sie sicher, dass die Antwort am Ende "Ok" und nicht "Err" ist? – Dogbert
Ich habe es gelöst, ich werde die Antwort in Kürze aktualisieren. – Jimbo
Wenn Sie Player-Datensätze im Filter vergleichen, stimmen sie möglicherweise nicht überein, was Sie vom Server erhalten. Besser einen Vergleich nur für die player.id machen. – Sebastian