我试图创建一个构建可能有嵌套子菜单的菜单的组件:
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
只有一个循环/级别,这是有效的,但我尝试了一些不同的方法,我无法使用这种方法使这项工作。 我可以做这个工作吗?
答案 0 :(得分:2)
当您使用.
功能(例如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
来表示子菜单的结尾。根据您的使用情况,您可能希望使用递归数据结构(例如树)来表示菜单。