榆树:使用`Address String Action`

时间:2015-12-31 22:12:54

标签: elm

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吗?

1 个答案:

答案 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之类的尝试。