【问题标题】:Map.get(assigns, :key) returns nil instead of expected value in the viewMap.get(assigns, :key) 在视图中返回 nil 而不是期望值
【发布时间】:2016-12-30 18:52:36
【问题描述】:
在模板中:
<%= @key %>
模板渲染@key的值,这里一切正常。
我想在相应的视图中使用@key,但是
Map.get(conn.assigns, :key)
给我nil。根据文档
@实际上是一个将@key翻译成Map.get(assigns, :key)的宏
那么为什么上面返回 nil 不是预期值?
更让我困惑的是,当我输入时
conn.assigns.key
在视图中,它给了我想要的值。
【问题讨论】:
标签:
elixir
phoenix-framework
【解决方案1】:
在模板中@conn.assigns 和assigns 是两个不同的东西。 assigns map 来自 EEx,是启用 @var 语法的原因。 conn.assigns来自plug,是不同plug中需要的数据的公共存储空间。
当您调用 Phoenix.Controller.render/3 时,您显式传递的赋值(作为最后一个参数)与 conn.assigns 合并,并作为 assigns 传递给模板,但 conn.assigns 不会更新为新值。