3

我正在尝试编写一个有点通用的布局,可以将字符串数组或选项哈希作为参数因此您可以这样做:

option:
    - "<li><b>One:</b> This is</li>"
    - "<li><b>Two:</b> Raw HTML</li>"

或者你可以这样做:

option:
    One: This is
    Two: a mapping

我想同时支持这两个版本的原因是这是一个公共布局,第一个选项已经被支持,但我更喜欢使用第二个选项,所以我想要一个支持两个版本的弃用期。

我在检查变量是否是液体中的字符串或数组类型时看到,有一种方法可以确定某物是数组还是字符串,但是数组和散列都有一个first属性!重用此函数的一种实用方法可能是检查变量的第一个元素是否具有first属性,如下所示:

{% if site.option.first %}
    {% if site.option.first.first %}
        hash
    {% else %}
        array
    {% endif %}
{% else %}
    Something else!
{% endif %}

但这似乎有点笨拙而且有点骇人听闻 - 另外,如果传递一个数组数组,它​​会给出错误的答案(即使在这种情况下“数组数组”不被视为有效输入)。有一个更好的方法吗?

4

1 回答 1

0

对于您知道不包含数字的数组,您可以使用以下内容:

---
arr:
  - ""
  - "2"
  - three
  - null
hash:
  foo: bar
  baz: null
  "0": 1
string: "a string"
---


nil: {{ page.nil_prop | map: "" | join: "," | size }} # 0
str: {{ page.string | map: "" | join: "," | size }} # 0
hash: {{ page.hash | map: "" | join: "," | size }} # 0
arr: {{ page.arr | map: "" | join: "," | size }} # 3

但是,如果一个数字潜入您的数组,您会得到Liquid Exception: no implicit conversion of String into Integer.

这是在 Jekyll 3.8 上。

于 2019-10-06T21:15:04.913 回答