我有一个(书籍)集合,允许用户深入研究一本书,对其进行编辑并将其添加/删除到收藏夹。
虽然书籍的基本 CRUD 使用 Backbone.js 很简单,但我不太清楚如何为从用户收藏夹中添加/删除书籍进行单独的 api 调用。
我能想到的最好的方法是破解同步方法,检查特定变量的选项,然后触发不同的 api 调用。这行得通 - 但我完全不确定这是否是正确的做事方式。
有什么建议么?
我有一个(书籍)集合,允许用户深入研究一本书,对其进行编辑并将其添加/删除到收藏夹。
虽然书籍的基本 CRUD 使用 Backbone.js 很简单,但我不太清楚如何为从用户收藏夹中添加/删除书籍进行单独的 api 调用。
我能想到的最好的方法是破解同步方法,检查特定变量的选项,然后触发不同的 api 调用。这行得通 - 但我完全不确定这是否是正确的做事方式。
有什么建议么?
我不确定您适合以下哪种情况,但希望它们能指导您
1)sync
您可以编写类似的东西,而不是从主干修改方法
url: function() {
if (updateFavorite)
return '/books/favorite';
else
return '/books';
}
2) 在大多数其他情况下,当您在单个模型上进行 CRUD 操作时,生成的 url 类似于collection.url + model.id
,您可以在Backbone Docs中阅读更多内容。
您可以使用两个集合:一个包含所有书籍,一个包含收藏夹。它可以是同一个集合类,但是对于收藏夹,您可以将“url”属性从“/books”或其他任何内容更改为“/books/favorite”或您喜欢的任何内容。
var books = new BookCollection({url: "/books"})
var favorites = new BookCollection({url: "/books/favorite"});
我认为可能还有很多其他解决方案,但这将是我的方法。
我的想法是每个 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';
},
});