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