首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于Access/Loaded的上下文对象(LoopBack3)中缺少模型实例,无法更改所需的属性值

由于Access/Loaded的上下文对象(LoopBack3)中缺少模型实例,无法更改所需的属性值
EN

Stack Overflow用户
提问于 2019-06-26 08:52:15
回答 1查看 183关注 0票数 0

每当在这个模型上调用find时,我想在someModel中修改一个属性。由于我不能使用remote hooks,因为find不是一个远程方法,而是内置的,而且在操作钩子中,find/findOne只触发访问和加载钩子,而作为我的研究,它们不返回ctx中的模型实例(或者如果它们返回了,我想知道它们在哪里),所以我想做这样的事情:

代码语言:javascript
复制
modelName.observe('loaded', function (ctx, next) {
      ctx.someModel_instance.updateAttribute(someCount, value
            ,function(err, instance){
             if (err) next(err)
                else{
                      console.log("done")
                 }

      });


} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 10:28:40

的作用是:作为loaded不返回模型实例,但它返回ctx.data,其中它返回模型中数据的一个副本,如果您的模型中碰巧有一个唯一的ID,那么您可以通过findById获取模型实例,并且可以持久地访问/更改该模型的属性。例如:

代码语言:javascript
复制
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();
} );

这将发挥作用,但问题将是不间断的递归,它造成的。因为findOneupdateAttribute将再次触发loaded hook,等等。这可以通过使用ctx.options字段来解决,该字段的作用类似于一个空容器,并可用于存储标志。例如:

代码语言:javascript
复制
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();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56768855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档