Se você já teve que lidar com uma ontologia de front-end que envolve grande profundidade, à la Playlists> Playlist> Tracks> Track , e tudo que você quer chamar é Playlists.reset( /* JSON received from server */ )
, e você está usando RequireJS, aqui está o que você faz:
Playlists:
define([
'jquery'
, 'underscore'
, 'backbone'
, '../models/playlist'
], function($, _, Backbone, Playlist){
var playlists = Backbone.Collection.extend({
model: Playlist
});
return new playlists;
});
Lista de reprodução
Essa é a parte importante! Quando este modelo for construído, seus atributos serão definidos antes de sua função de inicialização ser chamada, portanto, redefinimos sua coleção filho nesse momento:
define([
'jquery'
, 'underscore'
, 'backbone'
, '../collections/tracks'
], function($, _, Backbone, Tracks){
return Backbone.Model.extend({
// Add this initialize func to reset this
// model's child collection.
initialize: function(){
var tracks = new Tracks;
this.set('tracks', tracks.reset(this.get('tracks')));
}
});
});
É uma descida daqui …
Trilhas:
define([
'jquery'
, 'underscore'
, 'backbone'
, '../models/track'
], function($, _, Backbone, Track){
return Backbone.Collection.extend({
model: Track
});
});
Track:
define([
'jquery'
, 'underscore'
, 'backbone'
], function($, _, Backbone){
return Backbone.Model.extend({
});
});
Et voilà! Se você quisesse acessar uma faixa específica, faria o seguinte:
Playlists.get('playlist').get('tracks').get('track');
A moral da história é esta: se você está redefinindo uma coleção cujos modelos podem ter coleções, esses modelos precisam redefinir suas coleções com o JSON que receberam para aquele atributo. Em teoria, você poderia fazer isso ad infinitum.