我在我的主 LiveView 中渲染了一个嵌套(子)LiveView。子 LiveView 内的事件被发送到父而不是子。
我如何实现子 LiveView 接收事件而不是父事件?
我正在使用 phoenix_live_view 0.17.5。
这是我的设置:
我的主 LiveView 内的渲染:
def render(assigns) do
~H"""
<%= live_render(@socket, MyProjectsWeb.HomeLive.CreateProjectForm, id: "create-project-form-liveview") %>
"""
end
我的孩子 LiveView 内的渲染:
def render(assigns) do
~H"""
<.form let={f} for={@changeset} phx-submit="create">
<.field_label bind={f} for={:name} value={"Name"}/>
<.text_field bind={f} name={:name} />
<.primary_button type="submit">
Create
</.primary_button>
</.form>
"""
end
当我在我的子 LiveView 中提交表单时,我收到一条错误消息,指出我的父 LiveView 中的句柄事件函数未定义。
我尝试将 phx-target="create-project-form-liveview" 添加到我的表单中,但是当我这样做时,提交按钮不再执行任何操作,并且浏览器控制台显示“没有找到与 phx-target 选择器匹配的内容”create-project -form-liveview”未定义。
当我将 phx-target="#create-project-form-liveview" 添加到我的表单时,该事件会触发,但仍会被我的主(父)LiveView 接收。