我有一个正在制作原型(prototype)的小应用程序(我对 sails 非常陌生),它在列表中有一个任务。简单的东西。但是,当我创建任务并在创建后转发到列表时,该任务不会出现在我的列表中。如果我刷新页面,它就会刷新。
这是代码片段:
在任务->创建
List.findOne(req.session.List.id)
.exec(function foundTasks (err, list) {
Task.find({where: { list: list.id }, limit: 1, sort: 'priority desc'})
.exec(function getTaskPriority (err, task) {
if (err) {
console.log(err);
req.session.flash = {
err: err
}
}
list.tasks.add({name: req.param('name'), list: req.session.List.id});
list.save(function(err) {});
});
res.redirect('/list/show/'+req.session.List.id);
});
});
在列表中->显示
show: function(req, res, next) {
List.findOne(req.param('id'))
.populate('tasks')
.exec(function foundTasks (err, r) {
req.session.List = r;
if (err) return next(err);
res.view({
name: r.name,
tasks: r ? r.tasks : []
});
});
},
当我创建普通项目时,不会发生这种情况,仅通过 .add() 功能创建项目。它也发生在我的代码中的其他地方(我有多个上下文添加)。
使用此代码,如果我创建任务“Do this 1”,我将被重定向到我的任务列表,并且“Do this 1”不在那里。如果我点击刷新,它就会显示。如果我添加“Do this 2”,那么我将被重定向到任务列表,并且仅显示“Do this 1”。直到我刷新,然后出现“Do this 2”。
我认为可能存在异步问题(页面加载速度比在数据库中创建和读取记录的速度快?),但我添加了调试步骤来解决这个问题。
大家有什么想法吗?
最佳答案
我认为您在保存列表之前重定向到显示页面。你必须这样做:
list.tasks.add({name: req.param('name'), list: req.session.List.id});
list.save(function(err) {
res.redirect('/list/show/'+req.session.List.id);
});
在list.save()的回调中重定向到
/list/show/:id
关于javascript - sails.js:刷新之前,新创建的记录不会填充在页面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460215/