撇号小部件是否已分页?还是我需要手动实施

时间:2018-11-07 12:39:52

标签: apostrophe-cms

我有一个属性,其中每个属性都分配给一个代理, 我想做的是在“显示”页面中显示分配给每个代理的属性列表。 我当时在考虑在代理程序页面中使用撇号小部件,但是我不确定以这种方式使用它是否可行,我是否需要对其进行分页。 如果这不是正确的方法,我将被指出正确的方向。

2 个答案:

答案 0 :(得分:1)

图片中没有分页,最简单的方法是添加反向联接。

如果属性具有此字段:

{
  name: '_agents',
  type: 'joinByArray',
  withType: 'agent'
}

然后,代理可以拥有此代理,以获取将关联到它们的属性列表,作为_properties字段:

{
  name: '_properties',
  type: 'joinByArrayReverse',
  reverseOf: '_agents'
}

图片中有分页,取决于情况。如果我们正在谈论每个代理程序可能有100个属性,我会说要使用此技术,并可以选择在模板级别自己实现分页。如果每个座席有100个以上的属性,则可能有必要实施自己的属性查询,在该光标上设置perPage()并使用toCount()获取计数,然后使用{ {1}}使用toArray()perPage()指定页码。 page()正是实现分页功能,因此您可以从那里借用。

从长远来看,如果可以通过配置在Apostrophe中的联接和反向联接来指定分页,那将是更加理想的。

答案 1 :(得分:0)

编辑:仅看到有关需要分页的注释,您是说分页吗?如果是这样,答案会更复杂

以下答案将获取所有加入的属性片段,并将它们传递给代理显示页面

假设您说“将每个属性分配给代理”,则意味着每个属性都有一个指向代理的joinByOne字段,您可以在beforeShow方法中获取所有相关文档agent-pages模块中的内容并将其附加到data,以便它们在您的模板(/lib/modules/AGENT-PAGES-MODULE/views/show.html)中可用

/lib/modules/AGENT-PAGES-MODULE/index.js

```

module.exports = {
  ... basic module configuration
  construct: function (self, options) {
    self.beforeShow = function(req, callback) {
      var criteria = { idFIELD_NAME_IN_PROPERTY_SCHEMA: req.data.piece._id }
      var projection = {} // This will get entire matching doc, you should clamp this down
      return self.apos.modules['PROPERTY_MODULE_NAME'].find(req, criteria, projection).toArray(function (err, docs) {
        req.data.relatedDocs = docs
        return callback(null);
      });
    }
  }
};

```

然后在show.html中,您将有data.relatedDocs进行迭代