我对 Phoenix LiveView 组件 (v0.15.4) 有疑问。
在文档中,有一个示例代码:
def handle_info({:updated_card, card}, socket) do
send_update CardComponent, id: card.id, board_id: socket.assigns.id
{:noreply, socket}
end
LiveView 组件没有handle_info/2
回调,因此send_update/3
被调用以将事件从父 LiveView 重定向到特定组件。
但是,我想将事件直接从父 LiveView 发送到特定组件,因为我想做这样的事情
# parent LiveView
def handle_info({:new_card, card_id}, socket) do
send_event CardStackComponent, id: :card_stack, event: "add_card", params: %{"card_id" => card_id}
{:noreply, socket}
end
# component
def handle_event("add_card", %{"card_id" => card_id} = _params, socket) do
card = get_card(card_id)
socket =
update(socket, :cards, fn cards ->)
[card | cards]
end)
{:noreply, socket}
end
当然,没有Phoenix.LiveView.send_event/2
. 以上是一个虚构的代码来说明我的意图。
phx-target="<%= @myself %>"
我知道如何通过将属性添加到 HTML 元素或使用pushEventTo
JavaScript 程序中的方法将事件从客户端(浏览器)发送到特定组件。
但是,据我所知,没有办法将事件直接从父 LiveView 发送到特定组件。
有什么解决方法或更好的方法吗?