私は何かダムをやっている必要がありますか、あるいはバックボーンのドキュメントの重要な部分を見逃しているかもしれませんが、私はこの方法で新しいコレクションを初期化するとModel.validate関数が起動する理由を理解できません:http://jsfiddle.net/5a3k/QSeH6/ ..私は '間違ってる?backbone-js:新しいコレクションを自動的に初期化するにはどうしたらいいですか?
編集:この行を実行することにより、タイトル
私は何かダムをやっている必要がありますか、あるいはバックボーンのドキュメントの重要な部分を見逃しているかもしれませんが、私はこの方法で新しいコレクションを初期化するとModel.validate関数が起動する理由を理解できません:http://jsfiddle.net/5a3k/QSeH6/ ..私は '間違ってる?backbone-js:新しいコレクションを自動的に初期化するにはどうしたらいいですか?
編集:この行を実行することにより、タイトル
を変更:
var myCollection = new Collection([{id: 'smith'}]);
あなたは一つのモデルで新しいコレクションを作成します。コンストラクタで渡されたすべてのモデルがコレクションに追加されます。追加されたモデルはそれぞれ検証されます。
詳細:
this.reset()
(source)を呼んでいます。.reset()
は、すべてのモデルを自動的にコレクションに追加します(source)。.add()
は、モデルごとに._add()
(source)を呼び出します。._add()
は、モデルが有効かどうかを確認している.prepareModel
を呼び出します(source)。 (問題の編集に基づいて)更新:
model.validate
は、モデルがBackbone.Model
(source)のインスタンスでない場合にのみ実行されます。
あなたは
var myCollection = new Collection([{id: 'smith'}]);
を使用してコレクションを作成するのであれば、モデルはObject
のインスタンスです。しかし、あなたが使用している場合:
var myCollection = new Collection([ new Model({id: 'smith'}) ]);
することは、その後のモデルはBackbone.Model
のインスタンスであると検証はスキップされます。
はい私が思っていたので、 'myCollection.reset([{id: 'smith'}]));' - http://jsfiddle.net/5a3k/QSeH6/17/...まだ火災を検証します.. – zack
@ザック:答えの詳細を参照してください。コンストラクタは '.reset()'を呼び出してモデルを追加し、検証します。 '.reset()'を自分自身で呼び出すと、バリデーションもトリガされます。詳細リストの第1ステップだけがスキップされます。 – kubetz
ありがとうございました、悪い言い方をした質問のお詫び - 編集 – zack