Elixir Phoenix:不只是简单地生成一个链接

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

在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

我一定错过了一些简单的东西。

elixir phoenix-framework
1个回答
0
投票

phoenix_html
4.0 中,许多 HTML 生成功能从核心中删除。 这些已移入新的
phoenix_html_helpers
库,包括
PhoenixHTMLHelpers.Link.link/2
。 一个简单的方法是采用
phoenix_html
变更日志

中描述的解决方法
  1. mix.exs
    中添加依赖项
    {:phoenix_html_helpers, "~> 1.0"}
    
  2. 将其导入您的
    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>
© www.soinside.com 2019 - 2024. All rights reserved.