昨日、かなり調べた結果、バックボーン モデルに個々の属性を設定したくない場合 (および検証を行いたい場合) を送信する必要があることがわかりました{silent: true}
。そうは言っても、backbone.js の次のリリースでは、silent: true
実際にはまだ検証が実行されることもわかりました。
これに関する問題は、実際に属性を設定することからブロック セットを検証することです。したがって、silent:true がなければ、単一の属性を受け入れる set メソッドを使用しても意味がありません。これを回避するために、validate メソッドは次のようになります。
validate : function(attrs) {
var errors = {};
if (typeof attrs.first_name !== 'undefined' && !attrs.first_name) {
errors.first_name = "First name can't be empty";
}
...
if (!_.isEmpty(errors)) {
return errors;
}
}
これにより、保存が機能しなくなります。そこで、次のように書くことにしました。
if (_.isEmpty(attrs)) {
attrs = this.attributes;
}
それに関する問題は、保存時に送信された属性がある場合、それらをマージする必要があることです。これは問題ないと思いますが、これは、いくつかの単純な検証を機能させる/実行しないようにするためのかなりの量の作業です。さらに、_validate をオーバーライドしない限り、すべてのモデルでそれを行う必要があります。
これを行うより良い方法はありますか?