【问题标题】:Optional values in Elixir/Phoenix EEx shared templatesElixir/Phoenix EEx 共享模板中的可选值
【发布时间】:2015-11-09 23:27:21
【问题描述】:
我正在尝试在 Phoenix EEx 共享模板(我重复使用的模板)中传递值。到目前为止,一切都很好,但现在我想让其中一些是强制性的,而另一些则是可选的。例如:
<a href="<=% @url %>" class="core Item <%= className %>">
-
url 应该是强制性的 - 这是默认设置(OK);
-
className 应该是可选的 - 我不能这样做,因为如果我在调用模板时不包括它
(<%= render MyProject.SharedView, "myTemplate.html", url:"logo2.png" %>)
有一个错误。
我该怎么做?
【问题讨论】:
标签:
elixir
phoenix-framework
【解决方案1】:
如果assigns 中不存在密钥,则使用@class_name(按照约定,变量应写在snake_case 中)将引发。
您可以使用assigns[:class_name],如果未设置assigns 中不存在的密钥,则不会引发。
Phoenix 0.14.0 之前的@company 如果未设置则返回 nil。它被更改为 raise 以便分配是显式的(显式而不是隐式)。
因此,您还应该考虑显式传递一个 nil 类名(如this comment 中所建议的那样):
<%= render MyProject.SharedView, "myTemplate.html", url:"logo2.png", class_name: nil %>