变量
变量让您能够在运行时自定义 Markdoc 文档。
这里我正在渲染一个自定义的 {% $variable %}
当服务端数据发生变化时,您可以通过重新渲染页面来实时呈现它。每次重新渲染都会使用该变量的最新值。
(某些模板语言允许变量在渲染过程中发生变化,从而让您能够在 for 循环等结构中使用它们。Markdoc 不这样做,但它提供了替代方法来完成同样的工作。)
全局变量
您可以通过几种方式传递变量。最简单的方式是通过您的配置对象上的 variables 字段。
const doc = `
{% if $flags.my_feature_flag %}
用户名: {% $user.name %}
{% /if %}
`;
/** @type {import('@markdoc/markdoc').Config} */
const config = {
variables: {
flags: {
my_feature_flag: true
},
user: {
name: 'Dr. Mark'
}
}
};
const ast = Markdoc.parse(doc);
const content = Markdoc.transform(ast, config);
局部文件中的变量
您也可以向局部文件传递变量。要执行此操作,请设置 variables 属性:
{% partial variables={sdk: "Ruby", version: 3} file="header.md" /%}
在局部文件中,访问值的方式与常规变量相同:
SDK: {% $sdk %}
版本: {% $version %}
替代方案
变量在页面渲染期间是不可变的。这保持了渲染行为的一致性和速度。但这意味着某些任务应该使用替代方案:
- 若要执行无副作用的计算,请使用自定义或内置 Markdoc 函数。
- 若要在渲染期间更新值,请使用自定义 Markdoc 转换函数。例如,运行 for 循环或累积表格目录的条目。
注意事项
Markdoc 不支持向某些node(例如 link 节点的 href)传递变量。相反,请将变量传递给自定义 link Tag 的 href attribute。