假设我有这个模板sample.html.eex
:
<div class="<%= @class %>" id="<%= @id %>">
<a href="home.html" class="<%= @class_a"></a>
</div>
虽然我想在我的模板中使用所有这些,但我希望@class
和@id
在调用模板时插入值,而@class_a
来自视图函数将其生成为@class
和@id
的串联。我的意思是:
1)当我在其他模板中调用此模板时,我将这些值传递给它:
<%= render myApp.ComponentView, "sample.html",
id: "six",
class: "six" %>
2)我在component_view中有一个函数:
def class_a (conn) do
class+id
end
然后,模板可以访问class_a
。
我的问题是如何在我的视图中访问class
和id
值。
我在尝试这样做时遇到了一些错误。怎么做得好?
答案 0 :(得分:4)
您是否只是将@class
和@id
传递给class_a
函数?
def class_a(class, id) do
"#{class}#{id}"
end
class_a(class, id)
然后,您可以从模板中调用此函数:
<div class="<%= @class %>" id="<%= @id %>">
<a href="home.html" class="<%= class_a(@class, @id)"></a>
</div>
请记住,使用@
并不是一件神奇的事。 @
是在分配中使用变量的Eex方式。如果您的视图中有class_a
功能,那么您将使用class_a
进行调用。 @class_a
存在的唯一方法是将其添加到assigns
结构上的conn
。
如果你想要一个只需要一个conn的函数,你可以使用conn.assigns
来获取值:
def class_a(conn) do
class = conn.assigns.class
id = conn.assigns.id
"#{class}#{id}"
end