【发布时间】:2017-04-14 13:11:48
【问题描述】:
我试图了解 Phoenix 中不同的 render 函数之间的区别。具体来说,我注意到 Phoenix 视图和 Phoenix 模板中有几个不同的 render 函数。
例如,在 Phoenix 控制器中,通常会看到如下内容:
# assume this is UserController
def index(conn, _params) do
users = Repo.all(Users) # let's assume that this gives you all your users
render conn, "index.html", users: users
end
在与此视图(即 UserView)关联的index.html 模板中,您可以看到如下内容:
# index.html
<ul>
<%= for user <- @users do %>
<li><%= render "user.html", user: user %></li>
<% end %>
</ul>
# user.html
<p><%= @user.name %></p>
我的理解是index.html模板内的render函数被编译成UserView内的render函数。此外,在iex 中挖掘之后,似乎UserController 的索引操作中的render 函数来自Phoenix.Controller.render/3。
但是,我注意到在默认的 app.html.eex 模板文件中,有一个如下所示的渲染函数:
<%= render @view_module, @view_template, assign %>
这似乎与之前渲染函数的签名不匹配。谁能帮忙解释一下这个渲染来自哪里以及它是如何工作的?
【问题讨论】: