Работа вокруг:
Так как loaded
не возвращает экземпляр модели, но он возвращает ctx.data
, в котором он возвращает копию данных в вашей модели, если у вас есть уникальный ID
в вашей модели, так что вы можете выбрать экземпляр модели с помощью findById
и может постоянно получать доступ / изменять атрибут указанной модели. например:
modelName.observe('loaded', function (ctx, next) {
modelName.findOne({
where: {id : ctx.data.id},
},function(err, someModel_instance){
if (err) next(err)
else{
someModel_instance.updateAttribute(someCount,value
, function(err, instance){
console.log(done)
});
}
});
next();
} );
Это сработает, но проблема будет в непрерывной рекурсии, которую она вызывает. Поскольку findOne
и updateAttribute
снова вызовут loaded hook
и так далее. Это можно решить с помощью поля ctx.options
, которое действует как пустой контейнер и может использоваться для хранения флагов. например:
modelName.observe('loaded', function (ctx, next) {
if(ctx.options && !ctx.options.alreadyFound){
modelName.findOne({
where: {id : ctx.data.id},
},{alreadyFound = true}, function(err, someModel_instance){
if (err) next(err)
else{
someModel_instance.updateAttribute(someCount,value
,{alreadyFound = true}, function(err, instance){
console.log(done)
});
}
});
}
next();
});