2017-09-02 2 views
0

Neu bei Ulme. Mit Ulme 0,18.Aktualisierung Modell mit Parameter in Ulme 0,18

Dies ist ein sehr einfaches SPA mit 12 Tasten (jeweils mit einem Notenwert). Sie klicken auf die Schaltfläche und es wird die Notiz angezeigt, auf die Sie geklickt haben.

Ich würde dies tun, indem Sie eine Funktion Put zu einer Schaltfläche über onClick zuweisen, dann übergeben Sie einen String-Parameter note, die verwendet wird, um das Modell zu aktualisieren.

Hier ist mein 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) 
    ] 

ich diesen Fehler:

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

Cannot find variable `note` 

19| case msg note of 

Antwort

0

Verstanden, die Aktion eingeben, dann auswerten, bevor in onClick gehen.

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

Ja. Außerdem denke ich, es wäre besser, wenn Sie Keys als union type setzen, wobei type Key = C | C# | D | D # | ... 'und dann kannst du deine' type Action' als 'type Action = Put ​​Key' einstellen. Was denken Sie? – gabrielperales

+0

@gabrielperales Schönes Beispiel für TDD in Elm. Typ Driven Development: P Das Modell wäre auch 'type Model: Key' und' model = C# '. – cDitch