在heex中使用它时,我似乎无法找到
link
函数。
index.html.heex
<%= link to: "/numbers/#{number.id}/messages", class: "block w-full h-full" do %>
Go
<% end %>
控制器/number_html.ex
defmodule MyApp.NumberHTML do
use MyAppWeb, :html
import Phoenix.HTML # This line doesn't fix it
embed_templates "number_html/*"
end
这是我得到的错误:
Compiling 1 file (.ex)
error: undefined function link/2 (expected MyApp.NumberHTML to define such a function or for it to be imported, but none are available)
│
18 │ <%= link to: "/numbers/#{number.id}/messages", class: "block w-full h-full" do %>
│ ^^^^
│
└─ (my_app 0.1.0) lib/my_app/controllers/number_html/index.html.heex:18:17: MyApp.NumberHTML.index/1
我一定错过了一些简单的东西。
在
phoenix_html
4.0 中,许多 HTML 生成功能从核心中删除。 这些已移入新的 phoenix_html_helpers
库,包括 PhoenixHTMLHelpers.Link.link/2
。 一个简单的方法是采用 phoenix_html
变更日志 和 中描述的解决方法
mix.exs
中添加依赖项
{:phoenix_html_helpers, "~> 1.0"}
my_app.ex
视图助手中
import Phoenix.HTML
import Phoenix.HTML.Form
use PhoenixHTMLHelpers
phoenix_live_view
0.18 添加了许多相应的 Phoenix 组件来替换这些组件,因此在更现代的堆栈中,您将使用 <.link to={...} />
而不是 <%= link to: ... %>
。 您可能再次需要将新的助手添加到您的 my_app.ex
视图助手
use Phoenix.Component
然后您的 HEEx 模板会更改为使用更新的组件语法
<.link to={"/numbers/#{number.id}/messages"} class: "block w-full h-full">
Go
</.link>
如果您还采用较新的验证路由设置,并且您的模型对象实现了
Phoenix.Param
协议(其中包括任何带有id
字段的结构),它看起来会更像
<.link to={~p"/numbers/#{number}/messages"} class: "block w-full h-full">
Go
</.link>