如何在模板中的渲染函数内连接@something

时间:2016-04-02 16:05:48

标签: phoenix-framework

我的模板中有这个功能:

<%= for {element, id} <- Enum.with_index(MyProject.PageView.Recursion.buildElements(@header_linkNumber),1) do %>
        <%= render FabricaASA.ComponentView, @header_linkType,
            button_id: "#{id}",
            button_mainStyle: @header_mainStyle
        %>
    <% end %>

现在我想在我的右侧@header_mainStyle + id连接,以便从其他模板中,对于每个创建的元素,我可以传递:header_mainStyle1, header_mainStyle2,...header_mainStyleN

此外,在左侧,我有button_mainStyle:我希望连接@header_linkType + _mainStyle:,以便我可以动态地将其更改为link_mainStyle:button_mainStyle:

到目前为止,我无法正确地做到这一点......

1 个答案:

答案 0 :(得分:0)

如果你需要这样的话,我担心你做错了什么。也许有一个更简单的解决方案......

无论如何:因为某些版本的凤凰城(我很抱歉,我不知道哪一个正好,也许是1.0?),@变量存储在@ conn.assigns地图中你可以通过以下方式访问它们在那里命名。在旧版本中,这些变量是宏,这种魔法不起作用。

所以你可以尝试把它放到控制器中:

def index(conn, _params) do
  render conn, "index.html", [var1: "var1"]
end

并进入页面模板:

<p>var1: <%= @var1 %></p>
<p>assigns:</p>
<%= for i <- 1..10 do %>
  <p>var<%= i %>:<p>
  <pre><%=
  varname = "var#{i}" |> String.to_atom
  inspect(@conn.assigns[varname]) %>
  </pre>
<% end %>

...你会看到var1到var10的绑定(截图:http://postimg.org/image/4b4790cjz/)。但它有点黑魔法,可能是错误的方法。