2017-08-07 21 views
2

在我模式我有一個存儲音節的List場:如何添加項目到一個多選擇和顯示他們在查看

type alias Model = 
{ freeSyllables : List FreeSyllable 
    ... 
} 

音節的樣子:

type alias FreeSyllable = 
{ syllable : String 
, usage : Usage 
} 

我想每個字符串中的音節綁定到select在我view

select [ size 20, style [ ("width", "70px") ] ] [] 

我該如何做到這一點?謝謝。

回答

2

爲了顯示每個音節的selectoption,你會從Html模塊需要option功能:

import Html exposing (Html, beginnerProgram, text, option, select) 
import Html.Attributes exposing (style, value) 
import Html.Events exposing (onInput) 

這時正好映射freeSyllables期權與valuetext等於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 
+0

謝謝,但Elm如何處理雙向數據綁定的概念? – Timo

+0

根據The Elm Architecture,'view'不會直接更新'model','model'不會直接更新'view'。每次更新都通過'update'功能。 'update'函數收到一條消息(例如輸入的'onInput'事件),並返回更新後的'model',然後顯示在視圖上。 –

相關問題