2016-04-26 13 views
0

Der folgende Code aus this Führung einen Union-Typen verwendet alle möglichen Widget-Typen zu halten, macht dann eine Ansicht:Ulme - Union-Typ und das Modell

type Widget 
    = ScatterPlot (List (Int, Int)) 
    | LogData (List String) 
    | TimePlot (List (Time, Int)) 

view : Widget -> Element 
view widget = 
    case widget of 
     ScatterPlot points -> 
      viewScatterPlot points 

     LogData logs -> 
      flow down (map viewLog logs) 

     TimePlot occurrences -> 
      viewTimePlot occurrences 

Meine eher elementare Frage ist:

Mit Bezug auf die Widget Art, was ist das zugrunde liegende Modell hier?

Bei einer Aktion (z. B. Benutzer möchte ein Streudiagramm-Widget sehen), was ist die zugrunde liegende Struktur, die aktualisiert werden sollte?

Antwort

1

Widget ist Ihre Rohdaten. Sie müssen dann separat die Daten modellieren

type alias Model = Widget 

Dann zeigen an, dass Sie einige eingehende IO-Daten haben

update action model = 
    case action of 
    ScatterPoints pts ->  -- List (Int, Int) 
     ScatterPlot pts 
    LogPoints pts -> 
     LogData pts 
    ... 

dann die Daten aus dem Original in der richtigen Art von Widget Ihre View-Funktion geladen haben Frage wird wissen, was mit den Daten zu tun ist

+0

Sind Permutationen von 2 oder 3 Widget-Typen außerhalb des Anwendungsbereichs des Beispiels? Ich habe mich gefragt, was müsste aktualisiert werden, wenn der Benutzer von einem Widget-Typ zu einem anderen wechseln wollte. – category

+0

Sie benötigen ein Benutzerereignis, um den Aktualisierungszyklus auszulösen, und eine Funktion, die die Daten in das neue Format umwandelt –