次の Bookshelf モデルは、モデルの保存時にユーザーのパスワードをハッシュします。唯一の問題は、そのmodel.set()
呼び出しを aに変更するとmodel.save()
、無限の保存/変更ループに入るということです。
var User = bookshelf.Model.extend({
tableName: 'users',
hasTimestamps: true,
constructor: function() {
var self = this;
bookshelf.Model.apply(this, arguments);
this.on('saving', function(model) {
if(!model.get('password')) {
return self.hashPassword(model);
}
});
},
hashPassword: function(model) {
bcrypt.genSalt(10, function(error, salt) {
bcrypt.hash(model.attributes.password, salt, function(error, hash) {
model.set({password: hash});
console.log(model.attributes);
});
});
}
});
バックボーンには、変更されたイベントをトリガーしないsilent: true
ように渡すことができるオプションがあることは知っていますが、ブックシェルフはそれをサポートしていないと思います。save()
model.set()
保存/変更ループを発生させることなく、行った変更を保存するにはどうすればよいですか?