Phoenix:渲染模板,它在模板中分配值

时间:2015-11-27 18:41:46

标签: elixir phoenix-framework

我正在尝试让我的应用程序干和模块化。但是当我尝试将一个组件(小模板)接收到在另一个模板(更大的模块)中调用/“instanciating”时传递的动态值时,我收到了这个错误:

assign @conn not available in eex template. Available assigns: []

我在模块中插入的组件(小模板)(较大的模板)​​是:

<div class="menuButton main <%= @class %>" id="<%= @id %>">
    <div class="menuButton firstChild linesItem"></div>
    <div class="menuButton firstChild textItem">MENU</div>
</div>

我使用以下方法将其插入我的模块中

<%= render myapp.ComponentView, "menuButton.html", class: nil, id: "menuButtonMenu" %>

我使用以下方法在我的页面中插入了模块:

<%= render myapp.ModuleView, "header.html" %>

什么是使这项工作最好的方法,同时仍然保持小组件/大模块的逻辑干净和干燥?

1 个答案:

答案 0 :(得分:16)

正如AbM所说,你需要明确传递你关心的指定,例如:

<%= render myapp.ModuleView, "header.html", conn: @conn %>

如果您想有条件地支持分配,可以像assigns这样引用它们:

<%= link "a link", to: "/", class: assigns[:class] || "default" %>