Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Keystone js中刷新模板_Javascript_Mongodb_Mongoose_Handlebars.js_Keystonejs - Fatal编程技术网

Javascript 在Keystone js中刷新模板

Javascript 在Keystone js中刷新模板,javascript,mongodb,mongoose,handlebars.js,keystonejs,Javascript,Mongodb,Mongoose,Handlebars.js,Keystonejs,我在keystone中创建了两个模型。一是CD_书,二是音乐家。当我打开CD_Book view时,我尝试连接这两个集合。我希望显示cd中的音乐家,因此创建此查询: keystone.list('CD_Book').model.findOne({ slug: locals.filters.cdbook }).exec(function(err, result) { locals.data.cdbook = resul

我在keystone中创建了两个模型。一是CD_书,二是音乐家。当我打开CD_Book view时,我尝试连接这两个集合。我希望显示cd中的音乐家,因此创建此查询:

        keystone.list('CD_Book').model.findOne({
            slug: locals.filters.cdbook
        }).exec(function(err, result) {
            locals.data.cdbook = result;
            let musiciansString = result.musicians
            musiciansTab = musiciansString.split(',');
            for (let i = 0; i < musiciansTab.length; i++) {
                keystone.list("Musician").model.findOne({
                    "title": musiciansTab[i].trim()
                }).exec(function(err, result) {
                    locals.data.musicians.push(result);
                    console.log(locals.data.musicians);
                });
            }
            next(err);
        });
keystone.list('CD_Book').model.findOne({
slug:locals.filters.cdbook
}).exec(函数(错误、结果){
locals.data.cdbook=结果;
让音乐家们去尝试
音乐家Stab=音乐家字符串拆分(',');
for(设i=0;i

当然,这是可行的,在console.log中,我得到了我想要的所有音乐家数据,但它不会显示在.hbs模板中。找到所有音乐家后,我应该如何刷新/更新模板?也许这不是实现这一点的最佳方法(通过使用for循环)

您的findOne调用是异步的,因此next()在它们完成之前被调用

因此,您的模板将在数据在locals.data.mummers中可用之前呈现

您可以尝试使用find而不是findOne一次性获取所有音乐家,然后在检索后将其设置为locals

完成后,您可以调用next(),继续渲染模板

试着这样做:

keystone.list('CD_Book').model
  .findOne({ slug: locals.filters.cdbook })
  .exec()
  .then(result => {

    locals.data.cdbook = result

    let musiciansString = result.musicians
    let musiciansTab = musiciansString
      .split(',')
      .map(musician => musician.trim())

    return keystone.list("Musician").model
      .find({ "title": { $in: musiciansTab } })
      .exec()

  })
  .then(result => {

    locals.data.musicians = result
    console.log(locals.data.musicians)
    next()

  })
  .catch(err => {
    next(err)
  })
我希望这有帮助