2016-05-16 10 views
0

私の/models/LocatableUser.jsでここで使用しようとしているフックの全体的な目標は、私が更新する必要のある実際の変更があるかどうかを調べることです。何かをする(別のAPI呼び出しを行う)。ループバック:モデルの変更を検出する

私はこのカスタムモデルを継承したカスタムモデルの構造を持っているので、親モデルにbefore saveフックを定義するときに両方のサブモデルで機能します。

LocatableUser.observe('before save', function (ctx, next) { 
    if (ctx.instance){ // new record 
     ctx.instance._address.getGeopoint(function (error, location) { 
     setLocation(error, location, ctx.instance, next); 
     }); 
    } else if (ctx.currentInstance) { // this is an update, currentInstance is treated as immutable 
     LocatableUser.findById(ctx.currentInstance.id, function(err, data) { 
     console.log('Locatable User: current data is: ', err, data) 
     }) 
     console.log('Locatable User: ctx is:', ctx); 
     ctx.currentInstance._address.getGeopoint(function (error, location) { 
     setLocation(error, location, ctx.data, next); 
     }); 
    } else { 
     console.warn('no context instance'); 
    } 
    }); 

このコードの問題であり、何かを見つけることができませんLocatableUser.findById()を呼び出すLocatableUserの具体的なクラスは、存在しないことから、実際の理由は次のとおりです。ここでは、LocatableUser私は親モデルで定義された方法のサンプルですクラスはLocatableUserの子クラスになります。私が見つけた唯一のことは、両方の子クラスでこのメソッドを定義することですが、それはコードを複製します。

LocatableUserクラスから派生クラスのfindByIdメソッドを呼び出す方法はありますか?

ループバック・バージョン2.22.0

+0

ctxを見ると、実際に使用されているクラスが分かりますか? –

+0

詳細を見ると、ctx.ModelDefitionのクラス名のフィールドがあるように見えますが、これはおそらく私がやろうとしていたものより良いアプローチです – BrDaHa

答えて

1

だから、私はこのことについて間違った方向に行っていたが判明:PUTコールで

ctx.currentInstanceはに私のための必要性を取り除く、現在保存されているインスタンスとしてでてきます同じインスタンスをIDで照会します。 ctx.dataオブジェクトは、残りのAPI呼び出しからの実際のペイロードです。そのため、一部の更新ロジックを実行する必要があるかどうかを判断するために、そのデータをcurrentInstanceと比較するだけです。

関連する問題