Sök…


Introduktion

ccapndave / elm-update-extra är ett fantastiskt paket som hjälper dig att hantera mer komplexa uppdateringsfunktioner och kan vara mycket användbar.

Meddelande som ringer en lista med meddelanden

Med hjälp av sequence du enkelt beskriva ett meddelande som ringer en lista med andra meddelanden. Det är användbart när du hanterar semantik i dina meddelanden.

Exempel 1: Du skapar en spelmotor och du måste uppdatera skärmen i varje ram.

module Video exposing (..)
type Message = module Video exposing (..)

import Update.Extra exposing (sequence)

-- Model definition [...]

type Message
    = ClearBuffer
    | DrawToBuffer
    | UpdateLogic
    | Update

update : Message -> Model -> (Model, Cmd)
update msg model =
    case msg of
        ClearBuffer ->
            -- do something
        DrawToBuffer ->
            -- do something
        UpdateLogic ->
            -- do something
        Update ->
            model ! []
                |> sequence update [ ClearBuffer
                                   , DrawToBuffer
                                   , UpdateLogic]

Kedja meddelanden med andThen

Funktionen andThen tillåter uppdatering av samtalskomposition. Kan användas med pipeline-operatören ( |> ) för att kedja uppdateringar.

Exempel: Du skapar en dokumentredigerare och vill att varje ändringsmeddelande du skickar till ditt dokument också sparar det:

import Update.Extra exposing (andThen)
import Update.Extra.Infix exposing (..)

-- type alias Model = [...]

type Message
    = ModifyDocumentWithSomeSettings
    | ModifyDocumentWithOtherSettings
    | SaveDocument

update : Model -> Message -> (Model, Cmd)
update model msg =
    case msg of
        ModifyDocumentWithSomeSettings ->
            -- make the modifications
            (modifiedModel, Cmd.none)
            |> andThen SaveDocument
        ModifyDocumentWithOtherSettings ->
            -- make other modifications
            (modifiedModel, Cmd.none)
            |> andThen SaveDocument
        SaveDocument ->
            -- save document code

Om du importerar också Update.Extra.Infix exposing (..) kanske du kan använda infix-operatören:

update : Model -> Message -> (Model, Cmd)
update model msg =
    case msg of
        ModifyDocumentWithSomeSettings ->
            -- make the modifications
            (modifiedModel, Cmd.none)
            :> andThen SaveDocument
        ModifyDocumentWithOtherSettings ->
            -- make other modifications
            (modifiedModel, Cmd.none)
            :> SaveDocument
        SaveDocument ->
            -- save document code


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow