2013-03-18 13 views
11

私は、次のBACKBONE.JSコレクションを持っている:それは/ API/V1 /タグ/ IDに投稿し、そのモデルのためのデータを保存するようコレクションのモデルを更新するには?

var Tags = Backbone.Collection.extend({ 
     url: "/api/v1/tags/" 
}), 

はどのようにして、コレクション内のモデルのいずれかをアップデートします。

私はコレクション にIDが2のモデルの名前を変更するのであればそれは次のようなデータで /API/V1 /タグ/ 2に置いてください: 名:新しい名前ID:2

+0

あなたは 'model.save({name: 'new name'});'を試しましたか? –

答えて

2

することができます変数をsaveメソッドに渡します。それは(あなたがBackbone.Syncをオーバーライドしない限り)jQueryのajaxメソッドが使用するすべてのオプションを受け付け

あなたが何か行うことができます:

model.save({ name:'new name' })を。

idPUTの方法は自動的にBackboneによって追加されます。

+0

HTTPパッチを使用して選択的に更新することもできます –

21

私は最近、コレクション内の特定のモデルを更新したいと考えました。問題は、私がちょうどmodel.saveを使用した場合、コレクションを更新しなかったということでした。目標は、コレクションのモデルを変更し、サーバー上で変更し、それに応じてコレクションを更新し、syncメソッドを使用しないことでした。たとえば、私は変数collectionを持っていて、id = 2でモデルを変更したいと思います。

だから、まず最初に、私はこのように、インスタンスモデルを作成します。次に
model.save({}, {url:'/api/v1/tags/'+model.get('id')})


var model = collection.get(2)

そこで私は、この特定のモデルの属性を更新します:
model.set({name: 'new name'})

その後、私はそれをサーバーに保存されます
collection.set({model},{remove: false})

setメソッド - これはパラメータで渡したモデルのリストを持つコレクションの「スマートな」更新です。
remove: falseパラメータ - コレクションで既存のモデルを削除することは、コレクションの制限です。 More here

7

まず、対応するタグモデルでは、コレクションの "url"と一致するように "urlRoot"を設定する必要があります。 「もある「()の作成」、コレクションに

var tag = collection.get(2); 
tag.set({key: "something"}); 
tag.save(); // model.save works because you set "urlRoot" 

:あなたは個別にタグを保存したい場合は

var Tag = Backbone.Model.extend({ 
    urlRoot: "/api/v1/tags" 
}); 

var Tags = Backbone.Collection.Extend({ 
    model: Tag, 
    url: "/api/v1/tags" 
}); 

これは便利です。それ以外の場合は、すべてのコレクションについて知っていませんidがnullでない場合はupdate()を呼び出します。それは混乱しない。 :)従って、これはかなり同等の以前のサンプルである:

collection.create({id: 2; key: "something"}); 

これは、ID = 2で既存のタグを更新し、PUTをトリガします。

これは古くからの質問です。私は同じ答えを探していたので答えました - あなたはおそらくこの問題を解決してからずっと前になりました。 :)

関連する問題