2012-01-06 12 views
1

私は何かダムをやっている必要がありますか、あるいはバックボーンのドキュメントの重要な部分を見逃しているかもしれませんが、私はこの方法で新しいコレクションを初期化するとModel.validate関数が起動する理由を理解できません:http://jsfiddle.net/5a3k/QSeH6/ ..私は '間違ってる?backbone-js:新しいコレクションを自動的に初期化するにはどうしたらいいですか?

編集:この行を実行することにより、タイトル

答えて

4

を変更:

var myCollection = new Collection([{id: 'smith'}]); 

あなたは一つのモデルで新しいコレクションを作成します。コンストラクタで渡されたすべてのモデルがコレクションに追加されます。追加されたモデルはそれぞれ検証されます。

詳細:

  1. Backbone.Collectionコンストラクタはthis.reset()source)を呼んでいます。
  2. .reset()は、すべてのモデルを自動的にコレクションに追加します(source)。
  3. .add()は、モデルごとに._add()source)を呼び出します。
  4. ._add()は、モデルが有効かどうかを確認している.prepareModelを呼び出します(source)。 (問題の編集に基づいて)

更新

model.validateは、モデルがBackbone.Modelsource)のインスタンスでない場合にのみ実行されます。

あなたは

var myCollection = new Collection([{id: 'smith'}]); 

を使用してコレクションを作成するのであれば、モデルはObjectのインスタンスです。しかし、あなたが使用している場合:

var myCollection = new Collection([ new Model({id: 'smith'}) ]); 

することは、その後のモデルはBackbone.Modelのインスタンスであると検証はスキップされます。

+0

はい私が思っていたので、 'myCollection.reset([{id: 'smith'}]));' - http://jsfiddle.net/5a3k/QSeH6/17/...まだ火災を検証します.. – zack

+0

@ザック:答えの詳細を参照してください。コンストラクタは '.reset()'を呼び出してモデルを追加し、検証します。 '.reset()'を自分自身で呼び出すと、バリデーションもトリガされます。詳細リストの第1ステップだけがスキップされます。 – kubetz

+0

ありがとうございました、悪い言い方をした質問のお詫び - 編集 – zack

関連する問題