model.set({field: 'value'})を実行すると、明示的に指定されたフィールドが唯一であるかのようにそのモデルの検証が実行されますモデルのパラメータセット。バックボーン:set()パラメータでのみ実行される検証
「first_field」と「second_field」フィールドの存在を必要とする検証がある場合、model.set({third_field: 'value'})を実行すると、first_fieldとsecond_fieldすでに設定されています。コンソールからは、検証が実行される前と後の両方でfirst_fieldとsecond_fieldが使用できますが、console.logには、validate関数内の第3フィールドのみが入力された(attrs)フィールドがあります。
私が公式文書で読んだことから、検証方法のパターンは問題ありませんが、何かが間違っています。以下の任意のアイデア感謝、コード:
class MyModel extends Backbone.Model
# ...
validate: (attrs) ->
errors = []
valid = true
console.log attrs
if (!attrs.first_field)
errors.push('You must add a first field')
if (errors.length > 0)
return errors
# ...
とコンソールから、私は
m = window.router.my_models.test_model # Contains attributes 'first_field' and 'second_field'
m.set({new_field: 'test value'})
を実行する場合には、検証から来ている、「偽」を返します。 validateメソッド内部ATTRS上にconsole.log backbone docsからのみATTRS値の存在が明示的に設定された「new_field」
と交換しますか?私のデバッグに基づいて、Backbone.Mvalid._validate()のこの行のためにモデル全体の属性がvalidate()に送られているようです: "attrs = _.extend({}、this.attributes、attrs);" – SAGExSDX
はい - これが書かれて以来、バックボーンは大きく変化しました。 – PlankTon