【问题标题】:form_for issue in Phoenix凤凰城的form_for问题
【发布时间】:2022-02-03 06:16:01
【问题描述】:

我是 Phoenix/Elixir 的新手,正在尝试制作一个小聊天应用程序。我遇到了一些困难,希望您能提供帮助。

这是我的代码

<%= f = form_for :chat, "#", id: "chat-form", phx_submit: :submit_message %>
  <%= text_input f, :message, placeholder: "Enter Message" %>
</form>

这会引发以下错误

(Phoenix.LiveView.HTMLTokenizer.ParseError) lib/chat_web/live/room_live.html.heex:13:5: unmatched closing tag. Expected </div> for <div> at line 6, got: </form>

删除结束标签会出现以下错误

(CompileError) lib/chat_web/live/room_live.html.heex:11: undefined function form_for/3

请有人帮我找出为什么它不起作用

【问题讨论】:

  • 如果您将聊天变更集分配给 LiveView,请使用 @chat 而不是 :chat

标签: elixir phoenix-framework


【解决方案1】:

根据Phoenix.HTML.Form.form_for/3 的文档,第一个参数应该是Phoenix.HTML.FormData.t() 类型,而您正在那里传递一个原子。

在下面几行旁边会起作用。

<%= f = form_for @changeset, "#", id: "chat-form", phx_submit: :submit_message %>
  <%= text_input f, :message, placeholder: "Enter Message" %>
</form>

【讨论】:

    【解决方案2】:

    看起来您(就像我刚才所做的那样)与 Phoenix 文档所建议的那样构建表单相冲突,但您使用的是 heex 模板,该模板强制执行您的标签中的标签HTML 是正确的。

    所以这里有两种解决方案,具体取决于您编写的应用类型。

    1. 如果您不使用 LiveView,则将该模板另存为 leex,它会照常工作。

    2. 如果您使用的是 LiveView,那么有一种使用 form/1 函数构建这些表单的新方法,记录在此:https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Helpers.html#form/1

    【讨论】:

      【解决方案3】:

      在此处查看新文档:https://hexdocs.pm/phoenix_html/Phoenix.HTML.Form.html#form_for/3

      新语法如下所示:

      <%= form_for :chat, "#", id: "chat-form", phx_submit: :submit_message, fn f -> %>
        <%= text_input f, :message, placeholder: "Enter Message" %>
      <% end %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 2016-05-08
        相关资源
        最近更新 更多