改訂された質問
collection.resetメソッドとcollection.addメソッドの違い。どちらもモデルのリストを入力として受け取ります。ただし、単一の「リセット」イベントが発行されると、リセットはこのようなオブジェクトに戻ります。
{d,
_byCid: Object,
_byId: Object,
_callbacks: Object,
length: 3,
models: Array[3],
__proto__: x}
ただし、addメソッドは単純な配列を返します。これは、上記のmodels:Array[n]オブジェクトに表示されています。次に、以下のサンプルコードのaddRenderメソッドに表示されるようなことを簡単に実行できます。ただし、同じことを行おうとすると、同じモデルのリストを取得して処理するために追加の作業を行う必要があります。
答えられるべき質問:これらのメソッド(追加とリセット)が同じようなことをするのに、なぜ2つの異なる種類のオブジェクトを返すのですか?追加、モデルのリストを追加します。リセットし、既存のコレクションを削除して、モデルのリストに置き換えます。this
モデルが追加トリガーから返されるものである場合、リセットトリガーから返される用途は何ですか。モデルだけではなく、コレクションオブジェクトを返すことのメリット(例を教えてください)は何ですか?
---以下の元の質問---
私はbackbone.jsの使い方を学び、コレクションを試してきました。foo.add()を呼び出すことで、コレクションに多くのモデルを簡単に追加できることを発見しました。ここで、fooはコレクションです。しかし、foo.reset()を実行しても、期待したのと同じ入力が得られないことを発見しました。たとえば、backbonejsのドキュメントに従っても、モデルの新しいリストまたはハッシュを使用してコレクションをリセットします。
モデルを一度に1つずつ追加および削除することはすべてうまくいきますが、変更するモデルが多すぎて、コレクションをまとめて更新したい場合があります。リセットを使用して、コレクションをモデルの新しいリスト(または属性ハッシュ)に置き換えます
キーワードはリストです。add()にモデルのリストを送信でき、うまく機能します。ただし、リセットで同じことを行うには、データがテンプレートとは異なる方法で送信されるため、そのデータを処理するために別のテンプレートを使用します。実演するためにjsfiddleを作成しました。
私がイライラしているのは、reset()がadd()とまったく同じように動作するはずだと思うことですが、そうではないようで、そうでない理由を考えることはできません。私はこれについて間違っていますか?
更新 私は自分の質問に答え始めたと思います。backback.jsのソースのresetメソッド内の745行目に、次のようなものがあります。
if (!options.silent) this.trigger('reset', this, options);
そして631行目で、addメソッドにこれが表示されます。
model.trigger('add', model, this, options);
これは最初はresetメソッドからのもので、2番目はaddメソッドからのものです。リセットの場合、「this」が渡され、addが渡すものとは異なる構造を保持します。Addは個々のモデルを渡しますが、resetはすべてのモデルの配列を指すプロパティを持つオブジェクトを渡します。これは、jsfiddleで見たものを説明しています。ただし、これが実際にドキュメントに記載されている動作であるかどうかはわかりません。うーん