Buscar..


Introducción

ccapndave / elm-update-extra es un paquete fantástico que le ayuda a manejar funciones de actualización más complejas y puede ser muy útil.

Mensaje que llama a una lista de mensajes.

Usando la función de sequence , puede describir fácilmente un mensaje que llame a una lista de otros mensajes. Es útil cuando se trata de la semántica de sus mensajes.

Ejemplo 1: Está creando un motor de juego y necesita actualizar la pantalla en cada fotograma.

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]

Encadenando mensajes con y luego

La función andThen permite actualizar la composición de la llamada. Se puede utilizar con el operador de tubería ( |> ) para encadenar actualizaciones.

Ejemplo: está creando un editor de documentos y desea que cada mensaje de modificación que envíe a su documento también lo guarde:

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

Si también importa Update.Extra.Infix exposing (..) puede usar el operador infijo:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow