2

モデルのリストをサーバーからコレクションに取得します。ユーザーが特定のモデルに関心がある場合、IDに基づいてそのモデルのビューアーにルーティングします。

ここで、ユーザーがビュー内のそのモデルを編集する必要があるとします。たとえば、名前を更新します。モデルのURLを設定し、名前を更新してsaveを呼び出します。バックエンド(私の場合はJersey)を呼び出し、保存されます。ただし、コレクションはまだ自動的に更新されません。

コレクションがモデルの各変更にバインドして、それを自分で更新できないのはなぜですか?

コレクションの一部であるモデルを保存する正しい方法は何ですか?モデルでsaveを呼び出し(URLを設定して)、親コレクションから削除してから、silent:trueを使用して再度追加するのは正しいですか?

ありがとう。

4

1 に答える 1

0

コレクションは更新されませんか?

「コレクションが自動的に更新されない」は、「ビューが自動的に更新されない」という意味だと思います。

ビューは、少なくともバインディングを使用して明示的に言うと、モデルの変更に応答しません。

// code simplified and no tested
var MyModel = Backbone.Model.extend({});

var MyModelView = 
  Backbone.View.extend({
    initialize: function(){
      this.model.on( "change:all", this.render, this );
    },
    render: function(){
      this.$el.html( "<h1>" + this.model.title + "</h1>" );
    }
  })

モデルごとにURLを明示的に宣言します

@OlliMが言ったように、バックエンドが標準のCRUD APIをサポートしている場合、これは必要ありません。コレクション内のURLは、次のように宣言できます。

  • /app/collection

また、BackboneはこのURLをAPIとして使用します。

  • (GET)/app/collectionコレクション全体をフェッチする
  • (GET)/app/collection/1id=1のモデルのみをフェッチします
  • (PUT)/app/collection/1id=1でモデルを更新します
  • (POST)/app/collection新しいモデルを作成する
  • ...DELETEなど
于 2012-08-02T13:57:00.027 に答える