Zoeken…


Invoering

ccapndave / elm-update-extra is een fantastisch pakket dat u helpt bij het verwerken van complexere updatefuncties, en kan erg handig zijn.

Bericht dat een lijst met berichten oproept

Met behulp van de sequence kunt u eenvoudig een bericht beschrijven dat een lijst met andere berichten oproept. Het is handig bij het omgaan met semantiek van uw berichten.

Voorbeeld 1: u maakt een game-engine en u moet het scherm op elk frame vernieuwen.

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]

Berichten koppelen met andThen

Met de functie andThen kunt u de samenstelling van de oproep bijwerken. Kan worden gebruikt met de pijplijnbeheerder ( |> ) om updates te ketenen.

Voorbeeld: u maakt een documenteditor en u wilt dat elk wijzigingsbericht dat u naar uw document verzendt, het ook opslaat:

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

Als u ook Update.Extra.Infix exposing (..) importeert, kunt u mogelijk de infix-operator gebruiken:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow