2017-09-02 2 views
0

Nouveau pour l'orme. En utilisant l'orme 0.18.mise à jour modèle avec paramètre en orme 0,18

Ceci est un SPA très simple avec 12 boutons (chacun avec une valeur de note de musique). Vous cliquez sur le bouton et il affiche la note sur laquelle vous avez cliqué.

Je voudrais faire cela en affectant une fonction Put à un bouton via onClick, puis en lui passant un paramètre de chaîne note qui s'utilise pour mettre à jour le modèle.

Voici mon code:

import Html exposing (div, beginnerProgram, text, button) 
import Html.Events exposing (onClick) 
import List exposing (..) 

main = 
    beginnerProgram { model = model, update = update, view = view } 

-- model 
model = 
    { key = "C" } 

keys = 
    ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"] 

-- update 
type Action = Put 

update msg model = 
    case msg note of 
    Put -> 
     { model | key = note } 

-- view 
makeButton note = 
    button [ onClick Put note ] [text note] 

view model = 
    div [] [ 
    div [] [text (toString model.key)], 
    div [] (map makeButton keys) 
    ] 

Je reçois cette erreur:

-- NAMING ERROR -------------------------------------------------- musiccalc.elm 

Cannot find variable `note` 

19| case msg note of 

Répondre

0

obtenu, vous tapez l'action, puis d'évaluer d'abord avant d'entrer dans onClick.

import Html exposing (div, beginnerProgram, text, button) 
import Html.Events exposing (onClick) 
import List exposing (..) 

main = 
    beginnerProgram { model = model, update = update, view = view } 

-- model 
model = 
    { key = "C" } 

keys = 
    ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"] 

-- update 
type Action = 
    Put String 

update msg model = 
    case msg of 
    Put note -> 
     { model | key = note } 

-- view 
makeButton note = 
    button [ onClick (Put note) ] [text note] 

view model = 
    div [] [ 
    div [] [text (toString model.key)], 
    div [] (map makeButton keys) 
    ] 
+3

Ouais. Aussi, je pense qu'il serait mieux si vous définissez les clés comme un type d'union où 'type Key = C | C# | D | D # | ... 'et ensuite vous pouvez définir votre' type Action' comme 'type Action = Put ​​Key'. Qu'est-ce que tu penses? – gabrielperales

+0

@gabrielperales Bel exemple de TDD dans Elm. Type Driven Development: P Le modèle serait également 'type Model: Key' et' model = C# '. – cDitch