2016-04-22 7 views
0

私はページを持っており、コレクションが追加されています。これらのコレクションの中には、より多くの要素があります。コレクションとその中の要素の両方をどのように設定するのですか。KeystoneJS:データが移入された要素にどのように移入できますか?

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

あなたは深いコード

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') 
    } 
}); 
以下のようなものを投入してみてください