私の/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
ctxを見ると、実際に使用されているクラスが分かりますか? –
詳細を見ると、ctx.ModelDefitionのクラス名のフィールドがあるように見えますが、これはおそらく私がやろうとしていたものより良いアプローチです – BrDaHa