2017-10-08 102 views
2

我有一個下拉幾個代表層次結構。榆樹 - 下拉式「選擇」屬性不能在榆樹工作

當選擇某個項目時,父級下拉選擇會驅動子級下拉列表的選項。

當選擇父項時,我填充子項下拉列表,將第一個元素添加爲空白(「」)並將文本顯示爲「--select--」。

我希望這個項目是默認情況下在孩子的下拉列表中選擇,只要父母更改。

問題是,「選定」屬性似乎沒有完成它的工作。

childOptions : String -> Html msg 
childOptions val = 
    -- This selected attribute does not seem to work 
    Html.option [ (Html.Attributes.selected (val == "")), Html.Attributes.value val ] [ Html.text val ] 

您可以在這裏看到的行爲:

Ellie editor example

選擇父 「條目1」,然後選擇子 「1.2」。

現在選擇父項「entry 2」,並注意它忽略了「selected」屬性,只有當子項爲空(「」)時才爲真。 現在默認選擇的條目是「2.2」,對我來說這表示它保留了先前選擇的元素「1.2」的位置。

任何想法可以解決這個問題?

回答

0

該問題似乎存在於getOptions函數中;因爲它的參數不會改變,它的輸出(每<option>元素)也不會改變。並且由於輸出不會改變,Elm將不會修改<option>元素的selected屬性。

(由於有該<select>沒有Msg事件,榆樹沒有看到變化事件和新的價值。)

getOptions : String -> Html msg 
getOptions val = 
    Html.option 
     [ Html.Attributes.selected (val == "") 
     , Html.Attributes.value val 
     ] 
     [ Html.text val ] 

每個Hierarchy項目應跟蹤它的selected值,並將其傳遞到getOptions。類似這樣的:

getOptions : String -> String -> Html msg 
getOptions selectedValue val = 
    Html.option 
     [ Html.Attributes.selected (val == selectedValue) 
     , Html.Attributes.value val 
     ] 
     [ Html.text val ] 
+0

我不確定是這種情況。查看Ellie程序的更新版本(我更新了上面問題中的鏈接)。我現在正在發送消息,並且顯示父變量和子變量的變量中所選的值。 getOptions中的邏輯非常簡單...如果值爲空,請選擇它。 –

+0

@ marcio-j如果榆樹強制執行該邏輯會怎樣?用戶在第二個'select'選擇一個選項的那一刻,Elm會** un **選擇它,因爲該值不是空白。 –