我是 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
请有人帮我找出为什么它不起作用
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>
在此处查看新文档: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 %>
看起来你与以下事实发生了冲突(就像我刚刚所做的那样),即按照 Phoenix 文档的建议构建表单,但是你使用的是
heex
模板,它强制 HTML 中的标签是正确。
因此这里有两种解决方案,具体取决于您正在编写的应用程序类型。
如果您不使用 LiveView,则将该模板另存为
leex
,即可正常工作。
如果您使用 LiveView,那么有一种使用
form/1
函数构建这些表单的新方法,记录如下:https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Helpers.html#form/1
如果你使用的是最新版本的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 %>