我正在尝试使我的应用程序干燥并模块化。但是,当我尝试将一个组件(小模板)放置在另一个模板(较大的模块)中,该组件接收调用/“实例化”传递的动态值时,出现此错误:

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" %>

在保持小型组件/大型模块的这种逻辑清洁和干燥的同时,What是实现这一目标的最佳方法?

最佳答案

正如AbM所说,您需要显式传递您关心的分配,例如:

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

如果要有条件地支持分配,则可以像这样在assigns上引用它们:
<%= link "a link", to: "/", class: assigns[:class] || "default" %>

关于elixir - Phoenix : render template that has assigns values inside a template,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33963201/

10-10 17:20