从input获取值的规范示例是:
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
吗?
答案 0 :(得分: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
之类的尝试。