Non mescolare la definizione del tipo con la normale esecuzione del codice. Html
non è una funzione, è un tipo che accetta un parametro per definire un tipo per una funzione di visualizzazione.
Html msg
è la definizione più generale che si può avere come msg
è una variabile stessa, quindi restituisce Html che è indipendente dal tipo di messaggio che si sta utilizzando attualmente. Ciò potrebbe essere dovuto al fatto che non crea messaggi di eventi o perché la funzione di visualizzazione accetta i messaggi come parametri.
Come i commenti stabiliti Html()
sarebbe un tipo molto stretto che è vincolato a non restituire nulla.
Il caso più comune sarà una funzione di visualizzazione che restituisce Html Msg
- ad esempio HTML con messaggi basati sulle interazioni dell'utente.
Poiché Elm incoraggia la componentizzazione, è necessario tenere a mente anche Html.map
. La firma del tipo è Html.map : (a -> b) -> Html a -> Html b
. Nel contesto di componenti questo è più facilmente letta come
Html.map : (Child.Msg -> Parent.Msg) -> Html Child.Msg -> Html Parent.Msg
Si noti che quando si definiscono i messaggi nel componente genitore, si avrà qualcosa di simile:
type Msg = ChildMsg Child.Msg
che significa che ChildMsg
ha tipo di firma :
ChildMsg : Child.Msg -> Parent.Msg
Quindi le mie funzioni di vista hanno un sacco di
parentView model =
-- childView model.child |> Html.map ChildMsg
Html.map ChildMsg (childView model.child)
fonte
2016-05-22 06:52:04
Tuttavia, se non sbaglio, 'viewValidation' non attiva alcun' msg', giusto? – MoeSattler
sì, hai ragione. Dato che 'List' deve essere definito con un parametro (puoi usare' List a') anche se è vuoto, 'Html' deve essere definito con un parametro anche se quel parametro non è usato. Se vuoi puoi usare 'Html a' – marcosh
Anche se non restituisce nulla, puoi usare Html(). Vedi: http: // StackOverflow.it/questions/37257407/elm-how-to-create-a-view-that-doesnt-return-msg-in-0-17 – afcastano