node.js - KeystoneJS:无法保存 NumberArray
问题描述
我正在使用 KeystonJS,并且正在尝试按索引更新 NumberArray,但是当我保存更改时,它不会将其保存在管理 UI 中。
这是我的代码:
Project.model.findOne({projectId: projectId}).exec(function(err, project){
if (err) return res.apiResponse({statusCode: 500, message: err});
if (!project) return res.apiResponse({ statusCode: 400, message: "Can't find this projects" });
console.log("BEFORE : " + project.detailsPerc[index]);
project.detailsPerc[index] += 40;
// project.progressionPerc += 10;
project.save(function(err, result) {
if(err) {
console.log(err);
res.apiResponse({
statusCode: 400,
items: err
});
}
else {
console.log("RESULTAT :" + result);
console.log("AFTER : " + project.detailsPerc[index]);
res.apiResponse({
statusCode: 200,
items: project
});
}
})
})
结果很好:
RESULTAT :{ _id: 5ab158fb87475e062c0122c9,
clientId: '1',
__v: 2,
client: 5ad5f4aaa42faf03b95cacf6,
detailsPerc: [ 40, 0, 0 ],
details: [ 'Masterisation', 'EMM', 'Developpement' ],
progressionPerc: 20,
projectId: '1',
name: 'jarviis' }
但是当我进入管理 UI 时,我的数组仍然显示 [0,0,0]。此外,它在我更新 project.progressionPerc 时有效。
有谁知道我做错了什么?多谢你们!
解决方案
我试图重现该问题,发现更新 NumberArray 有一些问题。以下代码可以为我工作:
Project.model.findOne().exec(function(err, project){
if (err) return res.apiResponse({statusCode: 500, message: err});
if (!project) return res.apiResponse({ statusCode: 400, message: "Can't find this projects" });
console.log("BEFORE : " + project.detailsPerc[index]);
var items = project.detailsPerc;
project.detailsPerc = null;
items[index] += 40;
project.detailsPerc = items;
project.progressionPerc += 10;
...
要点是我们必须用 null 重置它才能使更新发生。在重置之前,我使用项目来捕获原始值并在计算后重新分配回该字段。
推荐阅读
- asp.net-web-api2 - Web API 一项操作有效,而几乎相同的操作无效?
- typescript - 关于 import * as x from vs import x from 的说明
- spring - 使用 Spring Feign 将 GET 转换为 POST
- wpf - 将画笔定义为从另一个资源获取颜色的资源
- r - 如何正确地将我的函数作为用户输入参数传递?
- jenkins - 需要来自 Jenkins 的正确外观的电子邮件通知:包括自上次构建以来所做的 SVN 更改以及构建期间的错误(如果有)
- vbscript - VBS 快速循环线路
- python - 两点云之间的 3D 插值
- ruby-on-rails - 是否可以保留在 CircleCI 上运行的测试生成的 VCR 磁带
- delphi - 将 SysUtils.WrapText() 与包含单引号的字符串一起使用