凤凰城附加的布局变量,如@inner

roc*_*BOO 13 elixir phoenix-framework

我希望添加其他布局参数,如@inner布局.例如@title,<title>@title</title>用于各个页面的onload javascript的区域.

window.onload = function () {
   @onload_js
}
Run Code Online (Sandbox Code Playgroud)

这些是在布局中设置的,所以我不确定在Phoenix中处理这些的最佳方法.感谢:D.

Gaz*_*ler 27

对于页面标题,您只需从控制器传递一个值:

def edit(conn, params) do
  render(conn, "edit.html", page_title: "Edit The Thing")
end

<head>
  <title><%= assigns[:page_title] || "Default Title" %></title>
</head>
Run Code Online (Sandbox Code Playgroud)

请注意,如果分配中不存在该键,则使用它assigns[:page_title]代替@page_titleassigns.page_title将出错:page_title.


对于包含模板(您的脚本示例),有render_existing/3.

文档提供了与您请求的类似的示例,因此为方便起见,我将其复制到此处:

考虑应用程序布局允许视图动态呈现文档头部中的一部分脚本标记的情况.有些观点可能希望注入某些脚本,而其他观点则不会.

<head>
  <%= render_existing view_module(@conn), "scripts.html", assigns %>
</head>
Run Code Online (Sandbox Code Playgroud)

然后@inner视图的模块可以决定使用预编译模板提供脚本,或者直接实现该功能,即:

def render("scripts.html", _assigns) do
  "<script src="...">"
end
Run Code Online (Sandbox Code Playgroud)

要使用预编译模板,请在模板目录中为要为其呈现的相应视图创建scripts.html.eex文件.例如,对于UserView,请在web/templates/user /处创建scripts.html.eex文件.