Map.get(assigns, :key) 返回 nil 而不是视图中的预期值

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。根据文档

@实际上是一个宏,翻译@keyMap.get(assigns, :key)

那么为什么上面返回的nil不是预期值呢?

让我更加困惑的是,当我打字时

conn.assigns.key
Run Code Online (Sandbox Code Playgroud)

看来,它给了我想要的价值。

mic*_*ala 5

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