Вы можете извлечь полный объект события как Value
и передать его через порт.
port toJS : Value -> Cmd msg
onClickWithValue : (Value -> msg) -> Attribute msg
onClickWithValue toMsg =
on "click" (Json.map toMsg Json.value)
и в update
есть что-то вроде
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
SomeTag value ->
( { model | count = model.count + 1 }, toJS value )
в примечании, если значения, которые вы передаете в JS, являются базовыми (Bool, Int, Float, String, Maybe, Json.Decode.Value и List, Array, кортежи или записи предыдущих типов), вы можете просто передайте их как запись. Итак, в вашем случае вы можете иметь:
type alias Item =
{ price: String
, sku: String
}
port addToBag : (Item, Value) -> Cmd msg
type Msg
= ClickBag Item Value
view model =
button [onClickWithValue (ClickBag model.item)] [text "Add to bag"]
update msg model =
case msg of
ClickBag item value ->
( model, addToBag ( item, value ) )