form_for 凤凰城问题

问题描述 投票:0回答:4

我是 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

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

elixir phoenix-framework
4个回答
2
投票

根据

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>

1
投票

在此处查看新文档: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 %>

0
投票

看起来你与以下事实发生了冲突(就像我刚刚所做的那样),即按照 Phoenix 文档的建议构建表单,但是你使用的是

heex
模板,它强制 HTML 中的标签是正确。

因此这里有两种解决方案,具体取决于您正在编写的应用程序类型。

  1. 如果您不使用 LiveView,则将该模板另存为

    leex
    ,即可正常工作。

  2. 如果您使用 LiveView,那么有一种使用

    form/1
    函数构建这些表单的新方法,记录如下:https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Helpers.html#form/1


0
投票

如果你使用的是最新版本的phoenix_live_view,现在使用

.heex
模板,应该这样写(也不要忘记导入
Phoenix.HTML.Form
):

<%= form_for @chat_changeset, "#",
        [id: "chat-form",
        phx_submit: :submit_message], fn f -> %>
   <%= text_input f, :message, placeholder: "Enter Message" %>
<% end %>
© www.soinside.com 2019 - 2024. All rights reserved.