現在、スクリーンキャスト チュートリアルで backbone.js を学習していますが、途中で私のコードが動作を停止しCannot call method 'bind' of undefined
、Chrome の JavaScript コンソールにエラーがスローされたようです。エラー行はinitialize
関数に含まれています。
window.PlaylistView = Backbone.View.extend({
tag: 'section',
className: 'playlist',
initialize: function() {
_.bindAll(this, 'render');
this.template = _.template($('#playlist-template').html());
this.collection.bind('reset', this.render); //<<<<<< THIS LINE
this.player = this.options.player;
this.library = this.options.library;
},
render: function() {
$(this.el).html(this.template(this.player.toJSON()));
this.$('button.play').toggle(this.player.isStopped());
this.$('button.pause').toggle(this.player.isPlaying());
return this;
}
});
this.collection
ビューにはコレクションがあり、モデルのコレクションではないのはなぜですか? this.collection.bind()
他のビューで使用された場合、エラーは発生しなかったようです。window.LibraryAlbumView
which の呼び出しthis.collection.trigger('select', this.model);
と extendsでは、 のwindow.AlbumView
どこにもコレクションが定義されwindow.AlbumView
ていませんが、エラーはスローされません。これは私を混乱させているようです。
編集:
代わりにエラーが修正されました
window.Player = Backbone.Model.extend({
defaults: {
'currentAlbumIndex': 0,
'currentTrackIndex': 0,
'state': 'stop'
},
initialize: function() {
this.playlist = new Playlist();
},
私が持っていた
window.Player = Backbone.Model.extend({
defaults: {
'currentAlbumIndex': 0,
'currentTrackIndex': 0,
'state': 'stop'
},
initialize: function() {
playlist = new Playlist(); // <<< this line changed!
},
以前this.collection
こちらのコレクションも参考にしましたが、
window.BackboneTunes = Backbone.Router.extend({
routes: {
'': 'home',
'blank': 'blank'
},
initialize: function() {
this.playlistView = new PlaylistView({
collection: window.player.playlist, // <<<< THIS ONE!
player: window.player,
library: window.library
});
this.libraryView = new LibraryView({
collection: window.library
});
},