如何使用现有数据填充小部件?

How do I populate a widget with existing data?

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

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

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

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

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

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

相比之下,在 "show page," 上没有什么可编辑的 — 正如您所说,您已经有了成员,您可以通过循环遍历 data.piece._members 直接实现渲染它们。没有选择,所以没有要编辑的小部件。

当然,代码重用是一件好事,我理解为什么希望在 "show page" 和小部件中具有相同的演示文稿。

实现此目的的一个简单方法是在 members 模块中创建一个 memberMacros.html 文件,然后从小部件的 widget.html 和 [=15] 中导入该宏文件=] 文件:

{# 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) }}  

我认为这很好地解决了您的用例。

还有其他用于覆盖小部件字段的用例,这可能最终导致我们支持基于每个模板的小部件字段的有限覆盖。然而,这也有相关的成本,因为该数据需要被 JSONified 并通过小部件编辑器来回传递。所以我们可能永远不会为小部件的 "main content" 推荐它。使用由小部件和显示页面共享的 nunjucks 宏文件更有意义。