我有一个关于对象menus
的问题,类似于linklist
。它有一个怪异的行为。
这是代码。第6-9行包含4条类似的指令,用于从menus
对象获取菜单:
{% for link in linklists.main-menu.links %}
{% if collection.handle == link.handle %}
<p>test</p>
{% endif %}
{% assign linkTitleHandleize = link.title | handleize %}
<p>menu[collection.handle] returns {{ menus[collection.handle] }}</p>
<p>menu["bags"] returns {{ menus["bags"] }}</p>
<p>menu[link.handle] returns {{ menus[link.handle] }}</p>
<p>menu[linkTitleHandleize] returns {{ menus[linkTitleHandleize] }}</p>
{% endfor %}
因此html输出为:
测试
菜单[collection.handle]返回EmptyDrop
菜单[“ bags”]返回EmptyDrop
菜单[link.handle]返回LinkListDrop
menu [linkTitleHandleize]返回LinkListDrop
由于某些原因,仅当键为menus
或转换为link.handle
时link.title | handleize
对象才返回预期的“ bags”菜单数组(请注意,变量linkTitleHandleize
只是一个普通字符串)。
如果我尝试传递相同的字符串,但传递的是collection.handle
甚至纯字符串(在我的情况下是“ bags”),那么menus
将不返回任何内容。我很困惑,因为字符串相等(请参见第2行的条件-它返回true,并且“ test”正在呈现),这是一个非常奇怪的行为,在这一天之前,我以为我对Liquid非常了解。
UPD:我必须改一下我的问题。这与如何创建有效的代码版本无关。这是一种研究:为什么Liquid在menu [collection.handle]和menu [“ bags”]的情况下返回EmptyDrop,以及为什么在linkTitleHandleize = link的情况下,对于menu [link.handle]和menu [linkTitleHandleize]都返回LinkListDrop .handle = collection.handle =“包”。谢谢!
答案 0 :(得分:1)
液体中没有menus
物体。
我不知道您从哪里获得该对象引用。
代码应如下。
{% for link in linklists.main-menu.links %}
{% if collection.handle == link.handle %}
<p>test</p>
{% endif %}
{% assign linkTitleHandleize = link.title | handleize %}
<p>linklists[collection.handle] returns {{ linklists[collection.handle] }}</p>
<p>linklists["bags"] returns {{ linklists["bags"] }}</p>
<p>linklists[link.handle] returns {{ linklists[link.handle] }}</p>
<p>linklists[linkTitleHandleize] returns {{ linklists[linkTitleHandleize] }}</p>
{% endfor %}
请注意,由于您指的是https://help.shopify.com/en/themes/liquid/objects/linklist,因此它只会返回[Object]