代码之家  ›  专栏  ›  技术社区  ›  hownowbrowncow

回环:把观察者放在哪里?

  •  0
  • hownowbrowncow  · 技术社区  · 10 年前

    我对环回游戏比较陌生。我如何让观察员工作?

    例如,每当用户信息被更改或用户被创建时,我想观察一些东西。

    谢谢

    //this observer will be activated whenever the user is edited or created
    User.observe('after save', function(ctx, next) {
        var theUserObject = ctx.instance;
        if(ctx.isNewInstance){
            anotherModel.create(theUserObject.name,theUserObject.ID);
        }else{
            anotherModel.update(theUserObject.name,theUserObject.ID);
        }
        next();
    });
    

    这是ctx的正确用户吗?这个代码应该放在哪里?在User.js中?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Jordan Kasper    10 年前

    为了回答这个问题(见上面的评论):

    总的来说,你所做的大部分都是正确的。你想把 operation hooks 在 common/models/my-model.js 文件,但该上下文对象( ctx )将根据挂钩进行更改(请阅读上面的链接文档)。

    在您的情况下,要创建新模型,您需要访问 app 关闭当前模型,然后执行 create() ,但一定要将 next() callback在创建调用的回调中:

    //this observer will be activated whenever the user is edited or created
    User.observe('after save', function(ctx, next) {
        var theUserObject = ctx.instance;
        if(ctx.isNewInstance){
            User.app.models.anotherModel.create({name: theUserObject.name, id: theUserObject.ID}, function(err, newInstance) {
                next(err);
            });
        } else {
            User.app.models.anotherModel.find({ /* some criteria */ }, function(err, instance) {
                if (err) { return next(err); }
                if (instance) {
                    instance.updateAttributes({name: theUserObject.name, id: theUserObject.ID}, function(err) {
                        next(err);
                    });
                }
    
            });
        }
    });
    
    推荐文章