gpt4 book ai didi

elixir - 如何清除 Phoenix LiveView 窗体中的文本区域?

转载 作者:行者123 更新时间:2023-12-04 15:36:56 25 4
gpt4 key购买 nike

我有一个 Phoenix LiveView,其表单不受数据层支持,如下所示:

<%= f = form_for :post, "#", [phx_submit: :create_post %>
<%= textarea f, :message, placeholder: "Say something:" %>
<%= hidden_input f, :user_id, value: @current_user.account_id %>
<%= submit "Post" %>
</form>

我无法使用变更集来支持表单,因为我没有使用 Ecto。提交表单后,提交处理正常,但是表单textarea没有清空。如何在不借助 Javascript 的情况下清除输入?

如果我不能没有 Javascript,我怎么能 Javascript,但没有绕过 LiveView phx-submit机制?

一些额外的故障排除信息:

这是我的事件处理程序:

def handle_event("create_post", %{"post" => post_params}, socket) do
thread_id = socket.assigns.thread.id
user_id = post_params["user_id"]
posts = Forums.append_post!(thread_id, user_id, post_params)
UdsWeb.Endpoint.broadcast_from(self(), build_topic(thread_id), "new_post", %{posts: posts})
{:noreply, assign(socket, :posts, posts)}
end

我已经尝试了几种不同的方法来解决这个问题,主要涉及支持表单的数据结构的变体。

  • 我试过用 map 支持表单。这是行不通的,因为表单必须由实现 Phoenix.HTML.FormData 协议(protocol)的结构支持,而 Phoenix 只为 Plug.ConnAtom 实现它
  • 我试过使用结构体,但由于与映射相同的原因,这不起作用
  • 我没有要在我的表单中使用的 Conn,因为这是一个 LiveView,但我可以在 LiveView Controller 中创建一个 Conn,所以我做了.我用它支持表单,并在事件处理程序中传递一个新实例以进行后期创建。这并没有解决问题。
  • 最后,我将 textarea 更改为 text_input,并在提交表单时立即清除此输入。所以看起来问题是特定于 textarea 元素的。我不确定这是否是 Phoenix 的错误。

最佳答案

正如 Aleksei 在他的评论中所说:您必须将一个新的 Post 结构从您的 Controller 传递到您的 View 。例如像这样:

def handle_event("create_post", post, socket) do
# Here do what you want with the data from the "post" parameter

{:noreply, assign(socket, :post, %Post{})}
end

关于elixir - 如何清除 Phoenix LiveView 窗体中的文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com