“菜单”液体对象的怪异问题

时间:2019-03-14 10:41:59

标签: shopify liquid

我有一个关于对象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.handlelink.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 =“包”。谢谢!

1 个答案:

答案 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]