每个模型只能注册一次loopback.io操作挂钩吗?

时间:2015-03-06 08:45:04

标签: loopbackjs strongloop

我正在尝试操作挂钩http://docs.strongloop.com/display/public/LB/Operation+hooks

以下是我在应用代码中所做的事情:

    mymodel.observe('before save', doSomething);

    //after some time elapses or based on an event we want to change the behaviour
    mymodel.observe('before save', doSomethingElse);


    var doSomething = function (ctx, next) {
        //do something
        next();
    };

    var doSomethingElse = function (ctx, next) {
        //do something else
        next();
    };

当我测试这段代码时,我发现总是执行doSomething,这让我想知道观察者函数是否只能在每个模型中注册一次,还是一个bug?

如果按照设计,你能告诉它背后的原因吗?

2 个答案:

答案 0 :(得分:2)

免责声明:我是LoopBack的核心开发人员,也是Operation hooks的作者。

  

经过一段时间或基于我们想要改变行为的事件

Operation钩子不支持取消注册处理程序功能。每次调用observe()都会将处理程序添加到触发挂钩时调用的方法列表中。

  

当我测试这段代码时,我发现总是执行doSomething,这让我想知道观察者函数是否只能在每个模型中注册一次,还是一个bug?

您可以注册多个观察者。注册doSomething后,将始终调用它。当您注册doSomethingElse时,doSomething通过next()返回后也会调用它。

答案 1 :(得分:1)

现在,您可以使用clearObservers方法取消注册所有观察者,并使用removeObserver方法删除单个观察者。请参阅ObserverMixin documentation.

根据changelog,数据源juggler的2.23.0版本中添加了此功能。