15

次の Backbone.js コレクションがあります。

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

コレクション内のモデルの 1 つを更新して、/api/v1/tags/id に投稿し、そのモデルのデータを保存するにはどうすればよいですか。

したがって、コレクション内の ID 2 のモデルの名前を変更すると、次のデータで /api/v1/tags/2 に PUT する必要があります: name: new name id: 2

4

3 に答える 3

8

最初に見逃す可能性があるのは、対応するタグ モデルで、コレクションの「url」と一致するように「urlRoot」を設定する必要があることです。それ以外の場合は、コレクションについてまったく認識しません。

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

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

これは、タグを個別に保存する場合に便利です。

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

コレクションでは、id が null でない場合、「create()」は「update()」でもあります。それは紛らわしいことではありません。:) したがって、これは前のサンプルとほとんど同じです。

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

これにより、既存のタグが id=2 で更新され、PUT がトリガーされます。

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

于 2015-03-02T22:43:16.943 に答える
2

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

次のようなことができます:

model.save( { name:'new name' } );

idandメソッドはPUTBackbone によって自動的に追加されます。

于 2013-03-19T07:56:30.473 に答える