2012-11-22 7 views
13

私はこれら2つの方法でドキュメントを読み、読んだことがありますが、私の人生の中では、BackboneJS collection.reset()vs collection.fetch()

誰かが私に基本的なコードの状況を伝えて、アプリケーションが適用され、他が適用されないようにすることができますか?

答えて

27

resetは、指定したモデルの配列でコレクションを設定します。

collection.reset([ { name: "model1" }, { name: "model2" } ]); 

fetchはからの収集データを取得しサーバーで、コレクションに指定したURLを使用します。

collection.fetch({ url: someUrl, success: function(collection) { 
    // collection has values from someUrl 
} }); 

Here's a Fiddle illustrating the difference.

+0

このような良い、簡潔、完全な答えのおかげでたくさん:) – benhowdle89

+0

この答えは完全ではありません。コレクション内の既存のすべてのモデルに対する書き込みをリセットしますか? –

+0

@AlexMillsはい、クリアしてから設定します – McGarnagle

1

reset()は、コレクションを新しい配列に置き換えるために使用されます。たとえば:

@collection.reset(@full_collection.models) 

は空のコレクションを返しますが

@collection.reset() 

、@full_collectionsモデルをロードします。 fetch()関数は、モデルのデフォルトコレクションを返します

3

ここではdocumentationを読んでいるとします。そうでない場合は少し混乱します。

あなたはそれが言っていること、fetchresetの文書を見れば、あなたはcollectionurlプロパティに指定したと - いくつかのサーバーコードを指しているかもしれない、とmodelsjson配列を返す必要がありますが、あなたcollectionmodelsが返されるようにしたい場合は、fetchを使用します。あなたは以下のJSONは、コレクションのURL上のサーバから返されてきた例えば

:成功したフェッチした後、あなたのコレクション内の3つのモデルを作成します

[{ 
    id : 1, 
    name : "a" 
}, { 
    id : 2, 
    name : "b" 
}, { 
    id : 3, 
    name : "c" 
}] 

collection fetchhereのコードを検索すると、取得で応答が得られ、指定されたオプションに基づいてresetまたはaddが内部で呼び出されます。 resetは、すでにjson of modelsがコレクションに格納されていると仮定して、パラメータとして渡します。あなたの人生では、あなたがコレクションを更新したいと思って、あなたが既にクライアント側にモデルを持っているなら、fetchを使う必要はなく、resetはあなたの仕事をします。

あなたはこのような何かを行うことができますリセットの助けを借りて、コレクションに充填するために、同じJSONにしたい場合はこのため、:

var _self = this; 
$.getJSON("url", function(response) { 
    _self.reset(response); // assuming response returns the same json as above 
}); 

まあ、これがために、従うべきプラクティスではありませんこのシナリオfetchはより良いです、それはちょうど例として使用されます。

リセットのもう1つの例はdocumentationページです。

は、それがアイデアを少し与え、より良いあなたの人生を作るホープ:)

関連する問題