我想在凤凰城的子视图/控制器中设置应用程序模板中的title
标记。
title
代码位于web/templates/layout/app.html.eex
模板内,但我有一个ArticlesController
呈现给<%= @inner %>
来自Rails我使用{{} 1}}通话,但无法在凤凰城找到它的等效物。
将属性从其子项传递到父模板/视图的正确方法是什么?
答案 0 :(得分:9)
你有几个选择。我假设你想在rails中使用content_for
。
一种选择是使用render_existing/3
http://hexdocs.pm/phoenix/0.14.0/Phoenix.View.html#render_existing/3
另一种灵活的方法是使用插件:
defmodule MyApp.Plug.PageTitle do
def init(default), do: default
def call(conn, opts) do
assign(conn, :page_title, Keyword.get(opts, :title)
end
end
然后在你的控制器中你可以做
defmodule FooController do
use MyApp.Web, :model
plug MyApp.Plug.PageTitle, title: "Foo Title"
end
defmodule BarController do
use MyApp.Web, :controller
plug MyApp.Plug.PageTitle, title: "Bar Title"
end
在你的模板中;
<head>
<title><%= assigns[:page_title] || "Default Title" %></title>
</head>
我们在这里使用assigns
代替@page_title
,因为如果未设置值,@page_title
将会提升。