Phoenix:如何在视图函数中使用插入模板助手中的值

时间:2015-12-18 12:02:34

标签: elixir phoenix-framework

假设我有这个模板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。 我的问题是如何在我的视图中访问classid值。 我在尝试这样做时遇到了一些错误。怎么做得好?

1 个答案:

答案 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