Woj*_*ski 2 elixir phoenix-framework
在模板中:
<%= @key %>
Run Code Online (Sandbox Code Playgroud)
模板渲染了 的值@key,这里一切都很好。
@key我想在相应的视图中使用,但是
Map.get(conn.assigns, :key)
Run Code Online (Sandbox Code Playgroud)
给我nil。根据文档
@实际上是一个宏,翻译@key为Map.get(assigns, :key)
那么为什么上面返回的nil不是预期值呢?
让我更加困惑的是,当我打字时
conn.assigns.key
Run Code Online (Sandbox Code Playgroud)
在看来,它给了我想要的价值。
在模板中@conn.assigns和assigns是两个不同的东西。assignsmap 来自 EEx,是启用@var语法的原因。conn.assigns来自plug,是不同plug中需要的数据的公共存储空间。当您调用Phoenix.Controller.render/3显式传递的分配(作为最后一个参数)时,该分配将与 合并conn.assigns并作为 传递给模板assigns,但conn.assigns不会使用新值进行更新。