我在app.html.eex'中找到了一个条款。由elixir phoenix自动创建:
<main role="main">
<%= render @view_module, @view_template, assigns %>
</main>
但是这个关键字地图在哪里分配&#39;来自?
答案 0 :(得分:1)
assigns
是hygiene bypassing中通过template compile-time声明的模板上下文局部变量。
答案 1 :(得分:0)
<强>分配强>
&#34;分配是指模板中可用的用户数据。但是,凤凰专门处理的指令下有钥匙,它们是:
:layout - 告诉Phoenix将渲染结果包装在给定的布局中。见下一节。 以下分配是保留的,不能直接设置:
@view_module - 正在渲染的视图模块 @view_template - 正在呈现的@ view_module模板&#34;
assigns是conn对象上的一个属性,用于添加数据以传递类似选项。
分配给@ conn.assigns, 在任何控制器,你可以玩这个 将此代码添加到控制器索引defmodule MyAppWeb.PageController do
use MyAppWeb, :controller
def index(conn, _params) do
conn = assign(conn, :thing, "this is not a taco")
render conn, "index.html"
end
end
然后在app.html.eex中添加此行
<%= assigns.thing %>
那么你应该看到&#34;这不是炸玉米饼&#34;当你点击控制器索引时,&#34; /&#34;在这个例子中
如果您将此行添加到控制器,则可以在服务器中看到它
...
conn = assign(conn, :thing, "this is not a taco")
IO.inspect(conn.assigns)
...
我最常见的是这用于设置用户指定在这样的视图中访问 ...插头/ set_user
def init(_params) do
end
def call(conn, _params) do
if conn.assigns[:user] do
conn
else
user_id = get_session(conn, :user_id)
cond do
user = user_id && Repo.get(User, user_id) ->
assign(conn, :user, user)
true ->
assign(conn, :user, nil)
end
end
end
...视图/ HTML
<%= if @conn.assigns.user do %>
Hello, <%= @conn.assigns.user.first_name %>!
<% else %>
... do something else
<% end %>
指定您使用的值&#39;分配&#39;
获取您使用的值&#39;指定&#39;