2015-12-31 80 views
0

用於從input獲取值典型的例子是:榆樹:使用`地址字符串Action`

view : Address String -> String -> Html 
view address string = 
    div [] 
    [ input 
     [ placeholder "Text to reverse" 
     , value string 
     , on "input" targetValue (Signal.message address) 
     , myStyle 
     ] 
     [] 
    , div [ myStyle ] [ text (String.reverse string) ] 
    ] 

我得到這個。但是我希望我的地址是Address String Action(其中Action是我定義的其他類型)。據我的理解,這意味着地址預計String後跟Action類型,因爲它的「參數」(我認爲Address作爲一個函數,但可能不正確)。

是否可以使用地址類型Address String Action,然後以類似的方式將其與輸入一起使用?或者我首先允許做Address String Action

回答

2

您鏈接到的example可能有點太簡單,因爲Action和Model都是字符串。你很少會遇到這種情況。

我已經調整了的東西,更規範的榆樹在目前形式的例子:

main = 
    StartApp.start { model = { text = "" }, view = view, update = update } 

type Action 
    = SetText String 

type alias Model = 
    { text : String } 

update : Action -> Model -> Model 
update action model = 
    case action of 
    SetText text -> 
     { model | text = text } 

view : Address Action -> Model -> Html 
view address model = 
    div [] 
    [ input 
     [ placeholder "Text to reverse" 
     , value model.text 
     , on "input" targetValue (Signal.message address << SetText) 
     , myStyle 
     ] 
     [] 
    , div [ myStyle ] [ text (String.reverse model.text) ] 
    ] 

通知的Action類型是如何聯合類型列出所有你可以與網頁互動的不同方式。在這個例子中,你唯一能做的就是設置文本。

view的簽名現在更加明確。第一個參數是類型爲Action的郵箱的地址,第二個參數包含模型的當前狀態。

view : Address Action -> Model -> Html 

沒有必要往下走試圖像Address String Action的路徑,因爲現在Action封裝文本的設置。