模板嵌套 - SQwatermark/Patchouli-wiki-zh_cn GitHub Wiki
为了使通用元素普适化且可以复用,模板可以嵌套在其他模板中。这个页面将介绍如何做到这一点。
要在一个模板中包含另一个模板,只需要向模板的 json 文件中添加 "include" 数组。在数组中,你可以指定任意多的 "嵌套模板"。
出于显而易见的原因,循环引用是不允许的。这意味着如果模板 A 包含模板 B,模板 B 就不能包含模板 A。如果你这么做,就会出现故障。
模板嵌套格式
- template(字符串,必需)
你想要嵌套的模板的 ID。
- as(字符串,必需)
你想要嵌套的模板的名字。每个内嵌模板都应该有不同的名字,否则会发生奇怪的事。这应该是一个非空值。
- using(对象)
要在此模板中绑定的变量的映射。阅读接下来关于变量绑定的小节了解这是什么意思,应该怎样使用。
- x(整数)
该模板在父模板中的水平偏移值。其中的所有元素都会按照这个值水平偏移。默认值为 0。
- y(整数)
该模板在父模板中的竖直偏移值。其中的所有元素都会按照这个值竖直偏移。默认值为 0。
变量绑定
内嵌模板中的变量可以在使用了主模板的章节中被解析,效果和普通的变量一样。格式为 "#as.name",假设主模板中包含一个内嵌模板,其 "as" 字段的值为 "incl",而且其文本包含 "#text" 变量。要设置这个变量的值,你可以将 "incl.text" 作为键。(译注:简而言之,要表示内嵌模板中的变量,使用 "内嵌模板名.变量名")
但如果你想要一个不同的名字呢?这是可以做到的!在内嵌模板对象中添加一个 "using" 对象,在我们的案例中,它看上去是这样的:
"include": [
{
"template": "sometemplate",
"as": "incl",
"using": {
}
}
]
在 "using" 块中,我们可以为内嵌模板中的变量设置值。你可以直接将值设置为你想要的值,也可以设置为另一个会被父模板(可以是章节页面本身,也可以是更外层的模板)解析的变量。
我们假设被内嵌模板的文本总是 "我是一个被包含的模板",我们可以这样做:
"using": {
"text": "我是一个被包含的模板"
}
我们也可以将其绑定为另一个变量:
"using": {
"text": "#text"
}
用这种方式,我们就不需要在章节中使用 "incl.text" ,你只需要使用 "text"。此外,如果 "#text" 在主模板的其他地方也被用到了,内嵌模板的文本也会相同,因为这只是变量的重复使用。按照同样的方式,你可以将内嵌模板的多个变量绑定到主模板的变量上。