piece._page._url 添加投影后不起作用

piece._page._url nor working after adding projection

我有一个小部件,我可以在其中选择指向网站上其他页面的链接。
focuslinks-widgets/views/widget.html:

{% for piece in data.widget._pieces %}
    <div class="col-md-4 col-sm-4">
        <a href="{{ piece._page._url }}" class="button">{{ piece.title }}</a>
    </div>
{% endfor %}

我的focuslinks/index.js

module.exports = {
    extend: 'apostrophe-pieces',
    name: 'focuslink',
    label: 'Fokuslink',
    pluralLabel: 'Fokuslinker',
    addFields: [
        {
            name: 'title',
            label: 'Navn',
            type: 'string',
            required: true
        },
        {
            name: '_page',
            type: 'joinByOne',
            withType: 'apostrophe-page',
            label: 'Side',
            required: true,
            idField: 'pageId'
        }
    ]
};

这是按预期工作的,但我遇到了另一个问题,导致页面出现多个关于缺少投影的警告。所以对于上面的小部件,我在 app.js:

中添加了投影
'supernode-focuslinks': {},
'supernode-focuslinks-widgets': {
    extend: 'apostrophe-pieces-widgets',
    filters: {
        projection: {
            slug: 1,
            title: 1,
            type: 1,
            tags: 1
        }
    }
},

在此之后小部件将像以前一样显示,但是 {{ piece._page._url }} 不再生成 href url。我做错了什么?

_url: 1 添加到您的投影对象

您在此处编写的投影获取了足够的信息来设置片段本身的 _url 属性,但不是它所连接的页面的信息 (.piece._page._url)。为此,您将必须确保您的投影还包含页面 ID,以便可以加入。

看起来像:

projection: {
  title: 1,
  _url: 1,
  _page: 1
}

有了这个 shorthand,Apostrophe 使用联接本身的名称为您查找 idField 的名称。同样,如果您指定 _url: 1,则撇号会替换为一块或一页计算所需的通常嫌疑人。

您还应该向 _page 联接本身添加一个投影。您不想支付加载每张图片的开销,谁知道页面上还有什么只是为了给它制作 link。这可能是导致系统多次回头加载内容,从而导致您看到警告的原因。