【问题标题】:KeystoneJS: How can I populate data in a populated element?KeystoneJS:如何在填充元素中填充数据?
【发布时间】:2016-06-08 21:22:29
【问题描述】:

我有一个页面,其中添加了集合。在这些集合中包含更多元素。如何填充集合和其中的元素。

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)
        });
    }
});

但一定有更好的办法。

【问题讨论】:

    标签: javascript mongoose keystonejs


    【解决方案1】:

    您可以尝试像下面的代码那样进行深度填充

    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')
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2021-05-05
      • 2013-02-12
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多