gpt4 book ai didi

javascript - 在 Keystone js 中刷新模板

转载 作者:行者123 更新时间:2023-11-30 20:51:17 25 4
gpt4 key购买 nike

我在 keystone 中创建了 2 个模型。一是 CD_Book,二是音乐家。当我打开 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);
});

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

最佳答案

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

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

您可以尝试使用 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)
})

希望对您有所帮助。

关于javascript - 在 Keystone js 中刷新模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48152433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com