1

我有一个(书籍)集合,允许用户深入研究一本书,对其进行编辑并将其添加/删除到收藏夹。

虽然书籍的基本 CRUD 使用 Backbone.js 很简单,但我不太清楚如何为从用户收藏夹中添加/删除书籍进行单独的 api 调用。

我能想到的最好的方法是破解同步方法,检查特定变量的选项,然后触发不同的 api 调用。这行得通 - 但我完全不确定这是否是正确的做事方式。

有什么建议么?

4

3 回答 3

2

我不确定您适合以下哪种情况,但希望它们能指导您

1)sync您可以编写类似的东西,而不是从主干修改方法

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

2) 在大多数其他情况下,当您在单个模型上进行 CRUD 操作时,生成的 url 类似于collection.url + model.id,您可以在Backbone Docs中阅读更多内容。

于 2012-08-07T15:24:21.690 回答
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 回答