Elm:使用“地址字符串操作”

Elm: Use `Address String Action`

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 类型,因为它是 "arguments" (我认为 Address 是一个函数,但这可能不是正确)。

是否可以使用 Address String Action 的地址类型,然后以类似的方式将其与输入一起使用?还是我一开始就可以做 Address String Action

您 link 的 example 可能有点过于简单,因为 Action 和 Model 都是一个字符串。你很少 运行 进入那个。

我用当前形式的 elm 更规范的内容对示例进行了调整:

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 封装了文本的设置。