【问题标题】:Refresh template in Keystone jsKeystone js中的刷新模板
【发布时间】:2018-06-17 13:23:36
【问题描述】:

我在 keystone 中创建了 2 个模型。一是CD_Book,二是Musicians。当我打开 CD_Book 视图时,我尝试连接这两个集合。我想从 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);
        });

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

【问题讨论】:

    标签: javascript mongodb mongoose handlebars.js keystonejs


    【解决方案1】:

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

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

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

    您可以在完成后调用 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)
      })
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 2017-04-20
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2013-11-04
      • 2018-05-04
      • 2017-05-20
      • 2015-04-04
      相关资源
      最近更新 更多