爲了顯示每個音節的select
的option
,你會從Html
模塊需要option
功能:
import Html exposing (Html, beginnerProgram, text, option, select)
import Html.Attributes exposing (style, value)
import Html.Events exposing (onInput)
這時正好映射freeSyllables
期權與value
和text
等於syllable
或某事其他(value
就是你所得到的輸入,text
就是屏幕上顯示的內容以供選擇)
view : Model -> Html Msg
view model =
let
syllableToOption : FreeSyllable -> Html Msg
syllableToOption freeSyllable =
option [ value freeSyllable.syllable ] [ text freeSyllable.syllable ]
in
select [ onInput SetSyllable ] (List.map syllableToOption model.freeSyllables)
當選擇一個選項時,會觸發一個事件(例如SetSyllable
)。因此,在update
函數中需要類似這樣的內容:
type Msg
= SetSyllable String
update : Msg -> Model -> Model
update msg model =
case msg of
SetSyllable syllable ->
model
謝謝,但Elm如何處理雙向數據綁定的概念? – Timo
根據The Elm Architecture,'view'不會直接更新'model','model'不會直接更新'view'。每次更新都通過'update'功能。 'update'函數收到一條消息(例如輸入的'onInput'事件),並返回更新後的'model',然後顯示在視圖上。 –