Hi, I’ve got the same problem, ended up with binary_to_term
and base64.
Code look like this:
defmodule SomethingWeb.SomethingLive do
use Phoenix.LiveView
def render(assigns) do
~L"""
<div phx-click="test" phx-value="<%= encode(%{value: 1, test: "..."}) %>">ClickMe</div>
"""
end
def handle_event("test", data, socket) do
data = decode(data)
# data.value => 1
# data.test => ".."
{:noreply, socket}
end
defp encode(value) do
value
|> :erlang.term_to_binary()
|> Base.encode64()
end
defp decode(value) do
value
|> Base.decode64()
|> elem(1)
|> :erlang.binary_to_term()
end
end