Jekyll YAML 循环引用
Jekyll YAML cyclic reference
我有一个包含两个页面的 jekyll 项目,每个页面都由相互引用的 YAML 映射支持。例如:
a: &a
name: "Ay"
parents: []
children: [*b]
b: &b
name: "Bee"
parents: [*a]
children: []
Vanilla YAML 似乎不支持在定义之前使用 alias/anchor,这使该策略无效。有没有什么办法,也许使用 liquid-fu 可以让我生成枚举条目的父项和子项的页面?
您只需在第一次出现时给出值:
a: &a
name: "Ay"
parents: []
children:
- &b
name: "Bee"
parents: [*a]
children: []
b: *b
alias/anchor 构造是专门为此 use-case 设计的。由于解析出来的YAML数据没有区分对象锚定的地方和引用的地方,所以这就相当于你想要的了。
正如上面问题的措辞,@flyx 的答案是最合适的,但是考虑到外部限制(参见 ) I ended writing my own plugin 让数据文件通过 liquid 在文本上相互包含。
这个插件的目标是让数据成为:
- DRY -(不要重复自己)每个模型应该只定义一次。
- 分组 - 所有类似的数据都应该以相同的格式彼此相邻定义。
- 分开 - 不同的数据应该在不同的地方定义。
@flyx 的解决方案未能实现目标 #2 和 #3,要求在同一位置定义所有不同类型的数据并混合食物和配料的定义。
我提出的解决方案允许将一个数据文件文本包含到另一个文件中。这允许在不同的文件中定义不同的模型,但从其他文件中引用它们就像它们以任意顺序在同一位置定义一样。应用于这个问题,我的解决方案是这样的:
A.yml
{% include_relative_once _data/B.yml %}
a: &a
name: "Ay"
parents: []
children: [*b]
B.yml
{% include_relative_once _data/A.yml %}
b: &b
name: "Bee"
parents: [*a]
children: []
对于插件本身,请参阅此 gist
我有一个包含两个页面的 jekyll 项目,每个页面都由相互引用的 YAML 映射支持。例如:
a: &a
name: "Ay"
parents: []
children: [*b]
b: &b
name: "Bee"
parents: [*a]
children: []
Vanilla YAML 似乎不支持在定义之前使用 alias/anchor,这使该策略无效。有没有什么办法,也许使用 liquid-fu 可以让我生成枚举条目的父项和子项的页面?
您只需在第一次出现时给出值:
a: &a
name: "Ay"
parents: []
children:
- &b
name: "Bee"
parents: [*a]
children: []
b: *b
alias/anchor 构造是专门为此 use-case 设计的。由于解析出来的YAML数据没有区分对象锚定的地方和引用的地方,所以这就相当于你想要的了。
正如上面问题的措辞,@flyx 的答案是最合适的,但是考虑到外部限制(参见
这个插件的目标是让数据成为:
- DRY -(不要重复自己)每个模型应该只定义一次。
- 分组 - 所有类似的数据都应该以相同的格式彼此相邻定义。
- 分开 - 不同的数据应该在不同的地方定义。
@flyx 的解决方案未能实现目标 #2 和 #3,要求在同一位置定义所有不同类型的数据并混合食物和配料的定义。
我提出的解决方案允许将一个数据文件文本包含到另一个文件中。这允许在不同的文件中定义不同的模型,但从其他文件中引用它们就像它们以任意顺序在同一位置定义一样。应用于这个问题,我的解决方案是这样的:
A.yml
{% include_relative_once _data/B.yml %}
a: &a
name: "Ay"
parents: []
children: [*b]
B.yml
{% include_relative_once _data/A.yml %}
b: &b
name: "Bee"
parents: [*a]
children: []
对于插件本身,请参阅此 gist