使用撇号博客,我在select
中添加了几个自定义字段。其中一个字段是module.exports = {
contextual: true,
addFields: [
{
type: 'select',
name: 'featuredIn',
label: 'Featured In:',
choices: []
},
construct: function (self, options) {
self.pageBeforeSend = (req, callback) => {
var featuredIn = self.options.addFields.find(x => x.name === 'featuredIn');
featuredIn.choices = []; //do a lookup from db - self.apos.docs.find(req, { id: ?})
return callback(null);
}
}
};
列表。但是,我需要根据正在编辑的文章的其他属性动态填充列表值。目前,我正在尝试这个,但管理模式停止工作,所以这看起来不会起作用:
self.apos.docs.find(req, { id: ?})
还有另一种做法吗?目前,我不确定我将在哪个事件中设置这些值,以及我将在哪里检索正在编辑的文章的文章ID - proof
。提前感谢您的指导。
答案 0 :(得分:0)
如您所知,我是P'unk Avenue的Apostrophe的首席开发人员。
我相信你试图将一件作品与另一件作品联系起来。这是一个内置功能;你只想加入。
您没有说明什么类型的文档正在被展示,以及它正在“推荐”的其他类型的文档。这已经令人困惑了(:所以让我举个例子:
SHOP SCHEMA
addFields: [
{
name: '_products',
type: 'joinByArray',
label: 'Featured:',
withType: 'product',
idsField: 'productIds',
sortable: true
}
]
轰隆隆......就是这样。编辑商店时,您会自动获得一个字段,允许您自动填写产品名称并选择它们。然后,当您查看商店时,您会发现._products
属性已为您填充。
idsField
属性只是一个mongodb属性,它将存储所选产品ID的实际数组。您可以给它任何名称,但我们建议使用此命名约定。
注意:您必须使用前导_
作为加入name
。如果你没有连接结束存储在数据库中,这是多余的,并且几乎立即过时。 _
表示“我是一个动态的临时财产,不要存储我。每次我需要时我都会再次计算。”
到目前为止一切顺利。但有时你有一个产品,你想知道它的特色商店。没问题:
产品计划
addFields: [
{
name: '_shops',
type: 'joinByArrayReverse',
label: 'Featured In:',
withType: 'shop',
idsField: 'productIds'
}
]
这是一种“反向连接”。只要有_shops
对象,它就会使product
数组可用。它的工作原理是将包含此产品的商店放在productIds
数组中。
您无法从反面编辑联接。如果您想要进行编辑,那么只需更改哪一方joinByArray
以及哪一方有joinByArrayReverse
。
希望这有用!
另请参阅我们的schema guide详细介绍了联接。