我目前正在通過截屏視頻教程學習backbone.js,我的代碼似乎停止工作,在Chrome的JavaScript控制檯中拋出錯誤Cannot call method 'bind' of undefined
。錯誤路線包含在initialize
功能:backbonejs:無法調用未定義的方法'綁定'
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
中調用this.collection.trigger('select', this.model);
並延伸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
refered到這裏彙集,
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
});
},
謝謝,我跟着你的反應和解決的錯誤在原來的職位更新。 'this.playlist = new Playlist();''this.playlist''和'playlist'有什麼區別?是'playlist'全球性的,如果它的全球性,爲什麼這會導致錯誤,因爲每個對象將能夠訪問''這個'播放列表' – Nyxynyx
通常從來沒有你期望的那樣。這就是爲什麼你應該在所有視圖和集合初始化方法中使用underscore.js'_.bindAll(this,'methodname','methodname2',...)'方法將其綁定到集合或視圖的方法。使用'this.playlist'你聲明播放列表是'window.player'的一部分,所以可以通過'window.player.playlist'來訪問。 – jakee
好了,我現在明白了,謝謝! – Nyxynyx