2

我在我的主 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 接收。

4

0 回答 0