Phoenix:在模板中赋值的渲染模板

Phoenix: render template that has assigns values inside a template

我正在努力使我的应用程序干涸和模块化。但是,当我尝试将一个组件(小模板)放置在调用/"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" %>

什么是在保持小型 components/larger 模块干净和干燥的逻辑的同时完成这项工作的最佳方式?

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

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

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

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