Recherche…


Introduction

ccapndave / elm-update-extra est un package fantastique qui vous aide à gérer des fonctions de mise à jour plus complexes et peut être très utile.

Message qui appelle une liste de messages

En utilisant la fonction de sequence , vous pouvez facilement décrire un message qui appelle une liste d'autres messages. C'est utile lorsque vous traitez la sémantique de vos messages.

Exemple 1: vous créez un moteur de jeu et vous devez actualiser l’écran à chaque image.

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]

Enchaîner des messages avec et puis

La fonction andThen permet de mettre à jour la composition de l'appel. Peut être utilisé avec l'opérateur de pipeline ( |> ) pour enchaîner les mises à jour.

Exemple: Vous créez un éditeur de document et vous souhaitez que chaque message de modification que vous envoyez à votre document, vous l'enregistrez également:

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 vous importez également Update.Extra.Infix exposing (..) vous pourrez peut-être utiliser l'opérateur infixe:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow