Я использую KeystonJS и пытаюсь обновить NumberArray по индексу, но когда я сохраняю изменение, оно не сохраняется в пользовательском интерфейсе администратора.
Вот мой код:
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.info("BEFORE : " + project.detailsPerc[index]);
project.detailsPerc[index] += 40;
// project.progressionPerc += 10;
project.save(function(err, result) {
if (err) {
console.info(err);
res.apiResponse({
statusCode: 400,
items: err
});
}
else {
console.info("RESULTAT :" + result);
console.info("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' }
Но все же, когда я захожу в пользовательский интерфейс администратора, мой массив все еще показывает мне [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.info("BEFORE : " + project.detailsPerc[index]);
var items = project.detailsPerc;
project.detailsPerc = null;
items[index] += 40;
project.detailsPerc = items;
project.progressionPerc += 10;
...
Суть в том, что мы должны сбросить это значение на ноль, чтобы обновление произошло. Перед сбросом я использовал элементы для захвата исходных значений и переназначал их обратно в поле после вычислений.