1

ユーザーが1冊の本にドリルダウンして編集し、お気に入りに追加/削除できるコレクション(本のコレクション)があります。

書籍の基本的なCRUDはBackbone.jsを使用すると簡単ですが、ユーザーのお気に入りから書籍を追加/削除するための個別のAPI呼び出しを行う方法についてはよくわかりません。

私が考えることができる最善の方法は、syncメソッドをハッキングし、特定の変数のオプションをチェックしてから、別のAPI呼び出しを実行することです。これは機能しますが、それが正しい方法であるかどうかは完全にはわかりません。

助言がありますか?

4

3 に答える 3

2

以下のどのケースに当てはまるかわかりませんが、ご案内いただければ幸いです。

1)バックボーンからメソッドを変更する代わりに、次のsyncように記述できます。

url: function() {
  if (updateFavorite)
    return '/books/favorite';
  else
    return '/books';
}

2)他のほとんどの場合、単一のモデルでCRUDアクションを実行している場合、生成されるURLは次のようcollection.url + model.idになります。詳細については、BackboneDocsを参照してください。

于 2012-08-07T15:24:21.690 に答える
1

2つのコレクションを使用できます。1つはすべての本を含み、もう1つはお気に入りのみを含みます。同じコレクションクラスにすることもできますが、お気に入りの場合は、「url」プロパティを「/books」などから「/books/favorite」などに変更します。

var books = new BookCollection({url: "/books"})
var favorites = new BookCollection({url: "/books/favorite"});

他にもたくさんの解決策があると思いますが、それが私のアプローチです。

于 2012-08-07T15:07:12.570 に答える
0

私の考えでは、すべてのBookModelにはFavoriteBookModelがネストされている必要があります。

ネストされたモデルを作成するコードを共有し、ネストされたモデルの外部キーとしてbookIdを使用してモデルを関連付けます。

 var BookModel = Backbone.Model.extend({
    url : '/books',
    initialize : function(){
        this.favoriteModel = new FavoriteBookModel();
        this.on('change', this.changeHandler);
        this.changeHandler();
    },
    changeHandler : function(){
        this.favoriteModel.set({ bookId : this.get('id')});
    }
  });

  var FavoriteBookModel = Backbone.Model.extend({
    url : function(){
        return '/books/'+this.get('bookId')+'/favorite';
    },
  });  
于 2012-08-08T15:27:05.090 に答える