2016-03-08 7 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', 
}); 

Я хочу знать, как сделать «добавить фильм» с этим URL:

/watchlists/:id/movies 

и удаления вызова:

/watchlists/:id/movies/:trackId 

Каковы наилучшие оценки?

+0

Вам нужно создать модель Backbone для вашего фильмы и создать в нем метод urlRoot, чтобы получить идентификатор списка, включая его. – 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