【问题标题】:How do I populate a widget with existing data?如何使用现有数据填充小部件?
【发布时间】:2017-04-29 21:55:00
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: apostrophe-cms


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 这是有道理的。几年后我回来看撇号,并没有考虑宏(我也认为自从我使用它以来它们已经改变了一点?不确定)。谢谢,我会试试看。听起来绝对像是解决了我的用例。我一直在使用不同的组件化 CMS,所以我以不同的方式思考它。
    猜你喜欢
    • 1970-01-01
    • 2017-03-05
    • 2023-03-07
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多