0

我一直在尝试创建一个具有强大层次结构的丰富数据模型——假设一个“团队”有“成员”——两者都是碎片。我已成功创建联接,并且 _members 对象可供团队使用。但是,我想在团队的“显示”页面上的小部件中自动显示这些成员。在 show.html (来自团队页面,从撇号页面扩展)中,我想做类似的事情:

apos.singleton(data.piece, 'members', 'members-widgets', data.piece._members)

我知道成员小部件可以正常工作——我可以将它包含在其他区域中并将其更新为普通部件小部件。

我一直无法想出一种方法来自动包含我已经拥有的成员对象。我尝试了几种不同的方法,但还没有找到可行的方法。这可能吗?我这样做完全错误吗?

4

1 回答 1

0

我是 P'unk Avenue 的 Apostrophe 的软件架构师。

小部件最初旨在作为一种允许用户编辑各种类型内容的机制。即使在“成员小部件”的情况下,这通常也是正确的:内容来自其他地方,编辑器决定显示哪些单个成员,或者选择显示具有特定标签的成员,或者选择显示所有成员。

相比之下,在“显示页面”上,没有什么可编辑的——正如你所说,你已经有了成员,你可以通过循环来实现渲染它们data.piece._members。没有可供选择的选项,因此没有可编辑的小部件。

当然,代码重用是一件好事,我理解为什么希望在“显示页面”和小部件中具有相同的表示。

实现此目的的一种简单方法是memberMacros.html在模块中创建一个文件,然后从小部件和文件中members导入该宏文件:widget.htmlshow.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 宏文件更有意义。

于 2017-04-29T13:55:00.950 回答