Irgendwie, wenn ich initialisieren meine Sicht Ich erhalte einen Fehler Uncaught TypeError: Cannot read property 'toJSON' of undefined
Backbonejs - Wie initialisiere ich die Ansicht?
Ich habe den folgenden Code:
//Model
var Song = Backbone.Model.extend({
defaults: {
title: 'Red',
artist: 'Taylor Swift',
filename: 'audio1.mp3',
playlist: 0
},
});
//Collection
var Playlist = Backbone.Collection.extend({
model: Song,
localStorage: new Backbone.LocalStorage('playlist'),
initialize: function(models,options) {
_.extend(this,_.pick(options, 'currentTrack'));
this.fetch({ajaxSync: true})
},
url: 'metadata',
parse: function(response){
return response
},
currentTrack: 0,
currentTime: 0
});
//View
var Player = Backbone.View.extend({
tagName: "audio",
id: "player",
model: playlist,
currentSong: function(){
console.log(this.model);
return this.model.at(this.model.currentTrack).toJSON();
},
events: {
'ended': 'next',
'pause': 'saveTime'
},
newTemplate: _.template('<source src="<%= filename %>" >'),
initialize: function(){
this.render();
},
render: function(){
this.$el.html(this.newTemplate(this.currentSong()));
$(document.body).html(this.el);
},
next: function(){
if(this.model.length == this.model.currentTrack){
console.log('End of the playlist');
}
else{
this.model.currentTrack++;
console.log('currentTrack: ', this.model.currentTrack);
this.render();
this.el.src = this.currentSong().filename;
this.el.play();
}
},
saveTime: function(){
console.log('Saving currentTime:', this.el.currentTime);
this.model.currentTime = this.el.currentTime;
}
});
var playlist = new Playlist();
var player = new Player({model: playlist});
Irgendwie, wenn ich initialisieren die player
sieht die playlist
colleciton wurde noch nicht besiedelt. Ich kann var player = new Player({model: playlist})
in Ordnung von der Konsole laufen.
Höchstwahrscheinlich müssen Sie auf Auflistungsereignisse warten und dann die Ansicht rendern. Wenn Sie debuggen, welche Variable ist nicht definiert? Außerdem ist 'playlist' eine Sammlung, also sollte es' collection: playlist' sein. – vassiliskrikonis
Es ist dieses Modell, das undefined zurückgibt – medicengonzo
'Modell: Playlist,' in den Ansichtseigenschaften (im 'extend') ist nutzlos. Dies ist eine Option, die an Instanziierung übergeben werden soll, wie Sie es am unteren Rand tun. –