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
是两个不同的东西。assigns
map 来自 EEx,是启用@var
语法的原因。conn.assigns
来自plug,是不同plug中需要的数据的公共存储空间。当您调用Phoenix.Controller.render/3
显式传递的分配(作为最后一个参数)时,该分配将与 合并conn.assigns
并作为 传递给模板assigns
,但conn.assigns
不会使用新值进行更新。