gpt4 book ai didi

elixir - Phoenix 框架 - 每个路由的页面标题

转载 作者:行者123 更新时间:2023-12-02 12:57:21 24 4
gpt4 key购买 nike

在 Phoenix 框架中,有一种基于路由/路径设置页面标题的常用技术。或者这只是在路由函数内的正确位置调用 assign(:page_title, "fred") 的问题?

更新

我最终实现了 @michalmuskala 解决方案的变体。我传递了操作名称而不是 @view_template:

<title><%= @view_module.title(action_name(@conn), assigns) %></title>

然后在 View 模块中代码如下所示:

def title(:show, assigns), do: assigns.user.name <> " (@" <> assigns.user.user_name <> ")"
def title(:edit, _assigns), do: "Edit Profile"
def title(_action, _assigns), do: "User related page"

上面代码中的最后一个语句是模块的可选“catch all”(并且我可能只会在转换时执行此操作)

最佳答案

处理标题的一个好方法是认识到 View 是一个像其他模块一样的模块。这意味着您可以在其上定义附加功能。另一方面,在布局中您可以访问当前 View 模块 - 这意味着我们可以调用之前定义的函数。

让我们看看这在实践中是如何运作的:

# The layout template
<title><%= @view_module.title(@view_template, assigns) %></title>

# In some view module
def title("show.html", _assigns) do
"My awesome page!"
end

由于传递了模板名称并分配给标题函数,它的工作方式与 render/2 完全相同 - 我们可以对模板名称进行模式匹配并可以访问所有分配。我们在所有 View 上无条件地调用该函数,因此必须在所有 View 上定义它 - 我们可以使用 function_exported?/3 添加一些额外的检查和一些默认的后备标题,但我认为明确并在每个 View 中定义它并不需要太多工作,并且可以使代码更简单。

关于elixir - Phoenix 框架 - 每个路由的页面标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42362376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com