动态设置文章的字段选择

时间:2016-11-22 02:22:27

标签: apostrophe-cms

使用撇号博客,我在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。提前感谢您的指导。

1 个答案:

答案 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详细介绍了联接。