我是 P'unk Avenue 的 Apostrophe 的软件架构师。
小部件最初旨在作为一种允许用户编辑各种类型内容的机制。即使在“成员小部件”的情况下,这通常也是正确的:内容来自其他地方,编辑器决定显示哪些单个成员,或者选择显示具有特定标签的成员,或者选择显示所有成员。
相比之下,在“显示页面”上,没有什么可编辑的——正如你所说,你已经有了成员,你可以通过循环来实现渲染它们data.piece._members
。没有可供选择的选项,因此没有可编辑的小部件。
当然,代码重用是一件好事,我理解为什么希望在“显示页面”和小部件中具有相同的表示。
实现此目的的一种简单方法是memberMacros.html
在模块中创建一个文件,然后从小部件和文件中members
导入该宏文件:widget.html
show.html
{# In show.html #}
{% import "members:memberMacros.html" as memberMacros %}
{{ memberMacros.output(data.piece._members) }}
{# in widget.html #}
{% import "members:memberMacros.html" as memberMacros %}
{{ memberMacros.output(data.widget._pieces) }}
我认为这很好地解决了您的用例。
还有其他用于覆盖小部件字段的用例,最终可能导致我们支持基于每个模板对小部件字段的有限覆盖。然而,也有与之相关的成本,因为这些数据需要被 JSON 化并通过小部件编辑器来回传递。所以我们可能永远不会推荐它作为小部件的“主要内容”。使用小部件和显示页面共享的 nunjucks 宏文件更有意义。