Backbone.js多个回调apis

时间:2012-08-07 15:02:11

标签: backbone.js

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

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

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

有什么建议吗?

3 个答案:

答案 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';
    },
  });