2016-03-08 78 views
0

这些路径的URL,我的服务器有:骨干示范urlroot

GET /watchlists 
GET /watchlists/:id 
POST /watchlists // Create a new watchlists 
PUT /watchlists/:id // Change attributes of watchlists (Like name) 
POST /watchlists/:id/movies // Add a movie 
DELETE /watchlists/:id/movies/:trackId // Delete a movie by the trackid 
DELETE /watchlists/:id // Delete the watchlists by is ID 

这里是我的模型:

var WatchlistModel = Backbone.Model.extend({ 
    urlRoot: '/watchlists', 
}); 

我想知道怎么做“添加电影”与此网址:

/watchlists/:id/movies 

和删除通话:

/watchlists/:id/movies/:trackId 

这是什么最好的实践?

+0

你需要创建一个骨干型号搜索电影,并在其中创建一个urlRoot方法来检索包含它的监视列表的ID。 – ejosafat

+0

我不确定要弄清楚这一点。 –

回答

1

一种解决方案是创建一个Movies集合作为每个WatchlistModel模型的子集,并为其父级引用它并使用该引用来构建其url

假设参考父存储在watchlist属性,像

var Movies = Backbone.Collection.extend({ 
    url: function() { 
     return _.result(this.watchlist, 'url') + '/movies'; 
    } 
}); 

var WatchlistModel = Backbone.Model.extend({ 
    urlRoot: '/watchlists', 
    initialize: function() { 
     this.movies = new Movies(); 
     this.movies.watchlist = this; 
    } 
}); 

您可以创建一个新的电影是这样的:

var lst = new WatchlistModel({id: 1}); 
var newmovie = lst.movies.create(); 
+1

不应该是 return _.result(this.watchlist,'url')+'/ movies' ?否则你会得到与父集合相同的url – ejosafat

+0

@ejosafat你说得对,谢谢你的注意。 – nikoshr