我有一个页面,它添加了集合。在这些集合中有更多元素。如何填充集合及其中的元素。
3个型号:
页
Page.add({
title: { type: String, initial: true, required: true},
collections: { type: Types.Relationship, ref: 'Collection', many: true, sortable: true}
});
集合
Collection.add({
title: { type: String, initial: true, required: true},
elements: { type: Types.Relationship, ref: 'Element', many: true, sortable: true}
});
元素
Element.add({
title: { type: String, initial: true, required: true}
});
我想加载它们......
view.on('init', function(next) {
var q = keystone.list('page').model.findOne({
state: 'published',
}).populate('collections collections[*].elements');
q.exec(function(err, result) {
if (result !== null) {
locals.data.page = result;
}else{
return res.status(404).render('errors/404')
}
});
});
我想我可以这样做......
var async = require('async');
view.on('init', function(next) {
var q = keystone.list('page').model.findOne({
state: 'published',
});
q.exec(function(err, result) {
locals.data.page = result;
var cl = locals.data.page.collections;
async.forEachOf( cl, function(collection, i, callback){
keystone.list('Collection').model.findById(collection).populate('elements').exec(function(err, elements) {
cl = locals.data.page.collections;
if (collection !== null) {
cl[i] = elements;
callback();
}
});
}, function(err){
next(err)
});
}
});
但必须有更好的方法。
答案 0 :(得分:0)
你可以尝试深度填充类似下面的代码
var q = keystone.list('page').model.findOne({
state: 'published',
}).populate({path: 'collections', populate: ['element']});
q.exec(function(err, result) {
if (result !== null) {
locals.data.page = result;
}else{
return res.status(404).render('errors/404')
}
});