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