Если из вашего примера не видно дополнительных ограничений, вы можете просто добавить дополнительный аргумент к KeyPressed
и передать через него идентификатор:
type Msg
= KeyPressed String Int
view : Model -> Html Msg
view model =
div []
[ div [ id "div1", contenteditable True, onKeyPress (KeyPressed "div1") ] [ text model.div1 ]
, div [ id "div2", contenteditable True, onKeyPress (KeyPressed "div2") ] [ text model.div2 ]
]
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
KeyPressed id code ->
-- Now you have the id
Однако вы, вероятно, не должны полагаться на строку идентификаторы в первую очередь, поскольку данные со строгой типизацией очень подвержены ошибкам. В идеале вы должны иметь отдельные Msg
варианты для каждого компонента:
type Msg
= Div1KeyPressed Int
| Div2KeyPressed Int
. Или, если вам нужно немного больше динамизма, вы можете использовать пользовательский тип Id
:
type Id
= Div1
| Div2
type Msg
= KeyPressed Id Int
view : Model -> Html Msg
view model =
div []
[ div [ contenteditable True, onKeyPress (KeyPressed Div1) ] [ text model.div1 ]
, div [ contenteditable True, onKeyPress (KeyPressed Div2) ] [ text model.div2 ]
]
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
KeyPressed Div1 code ->
-- update model.div1
KeyPressed Div2 code ->
-- update model.div2