如何在模板中的 `for <-` 中 运行 `for <-`
How to run a `for <-`inside a `for <-`in a template
我正在尝试创建一个组件来构建可能具有嵌套子菜单的菜单:
Product A
Product B ------ Product B1
Product C Product B2
Product B3
在我的组件中,我有这个(简化并删除了部分)代码:
<%= for {link_subMenuLinkNumber, id} <- Enum.with_index(@link_subMenuLinkNumber) do %>
<a class="comp link" href="<%= link_subMenuLinkNumber.link %>"><%= link_subMenuLinkNumber.text %></a>
<%= if link_subMenuLinkNumber.subMenu do %>
<%= for {link_subMenuLinkNumber.subMenu, id} <- Enum.with_index(@link_subMenuLinkNumber.subMenu) do %>
<a class="comp link secondLayer subMenu ite" href="<%= link_subMenuLinkNumber.subMenu.linkSubMenu %>"><%= link_subMenuLinkNumber.subMenu.textSubMenu %></a>
<% end %>
<% end %>
<% end %>
在我插入这个组件的模板中,我有这个(简化并删除了部分)代码:
link_subMenuLinkNumber: [
%{link: "/prod1", text: "LOLOL1", subMenu: nil},
%{link: "/prod2", text: "LOLOL2", subMenu: [
%{textSubMenu: "KAKAka", linkSubMenu: "/subProdKA"},
%{textSubMenu: "ZaZaza", linkSubMenu: "/subProdZA"}
]},
%{link: "/prod3", text: "LOLOL3", subMenu: nil}
]
我收到此错误:
...cannot invoke remote function link_subMenuLinkNumber.subMenu/0 inside match
只有一个 loop/level 这是有效的,但我尝试了几种不同的方法,但我无法使用这种方法来完成这项工作。
我可以做这个吗?
当您使用 .
函数时,您会经常看到这种情况(例如 link_subMenuLinkNumber.subMenu
您可以通过以下方式更轻松地查看:
iex> %{foo: "foo"}.foo = "foo"
** (CompileError) iex:2: cannot invoke remote function %{foo: "foo"}.foo/0 inside match
在你的情况下,你有:
<%= for {link_subMenuLinkNumber.subMenu, id} <- Enum.with_index(@link_subMenuLinkNumber.subMenu) do %>
别忘了这里是赋值,不能给link_subMenuLinkNnuber.subMenu.
赋值,相反,我觉得你想要:
<%= for {sub_menu, id} <- Enum.with_index(link_subMenuLinkNumber.subMenu) do %>
为了防止您的 if
检查,您还可以更改数据结构以使用空列表 ([]
) 而不是 nil
来表示子菜单的结尾。根据您的用例,您可能希望使用递归数据结构(例如树)来表示您的菜单。
我正在尝试创建一个组件来构建可能具有嵌套子菜单的菜单:
Product A
Product B ------ Product B1
Product C Product B2
Product B3
在我的组件中,我有这个(简化并删除了部分)代码:
<%= for {link_subMenuLinkNumber, id} <- Enum.with_index(@link_subMenuLinkNumber) do %>
<a class="comp link" href="<%= link_subMenuLinkNumber.link %>"><%= link_subMenuLinkNumber.text %></a>
<%= if link_subMenuLinkNumber.subMenu do %>
<%= for {link_subMenuLinkNumber.subMenu, id} <- Enum.with_index(@link_subMenuLinkNumber.subMenu) do %>
<a class="comp link secondLayer subMenu ite" href="<%= link_subMenuLinkNumber.subMenu.linkSubMenu %>"><%= link_subMenuLinkNumber.subMenu.textSubMenu %></a>
<% end %>
<% end %>
<% end %>
在我插入这个组件的模板中,我有这个(简化并删除了部分)代码:
link_subMenuLinkNumber: [
%{link: "/prod1", text: "LOLOL1", subMenu: nil},
%{link: "/prod2", text: "LOLOL2", subMenu: [
%{textSubMenu: "KAKAka", linkSubMenu: "/subProdKA"},
%{textSubMenu: "ZaZaza", linkSubMenu: "/subProdZA"}
]},
%{link: "/prod3", text: "LOLOL3", subMenu: nil}
]
我收到此错误:
...cannot invoke remote function link_subMenuLinkNumber.subMenu/0 inside match
只有一个 loop/level 这是有效的,但我尝试了几种不同的方法,但我无法使用这种方法来完成这项工作。 我可以做这个吗?
当您使用 .
函数时,您会经常看到这种情况(例如 link_subMenuLinkNumber.subMenu
您可以通过以下方式更轻松地查看:
iex> %{foo: "foo"}.foo = "foo"
** (CompileError) iex:2: cannot invoke remote function %{foo: "foo"}.foo/0 inside match
在你的情况下,你有:
<%= for {link_subMenuLinkNumber.subMenu, id} <- Enum.with_index(@link_subMenuLinkNumber.subMenu) do %>
别忘了这里是赋值,不能给link_subMenuLinkNnuber.subMenu.
赋值,相反,我觉得你想要:
<%= for {sub_menu, id} <- Enum.with_index(link_subMenuLinkNumber.subMenu) do %>
为了防止您的 if
检查,您还可以更改数据结构以使用空列表 ([]
) 而不是 nil
来表示子菜单的结尾。根据您的用例,您可能希望使用递归数据结构(例如树)来表示您的菜单。