Javascript backbonejs:无法调用方法';绑定&x27;未定义的

Javascript backbonejs:无法调用方法';绑定&x27;未定义的,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我目前正在通过一个screencast教程学习backbone.js,在这个过程中的某个地方,我的代码似乎停止了工作,在Chrome的javascript控制台中抛出了错误Cannot call'bind'of undefined。错误行包含在初始化功能中: window.PlaylistView = Backbone.View.extend({ tag: 'section', className: 'playlist', initialize: function()

我目前正在通过一个screencast教程学习backbone.js,在这个过程中的某个地方,我的代码似乎停止了工作,在Chrome的javascript控制台中抛出了错误
Cannot call'bind'of undefined
。错误行包含在
初始化
功能中:

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。为此,您需要初始化一些集合,然后将其传递给视图


新建播放视图({collection:someCollection})

谢谢,我按照您的回复解决了原始帖子中更新的错误。我错过了
this.
中的
this.playlist=新播放列表()
此播放列表与
播放列表之间的区别是什么?是
playlist
全局的,如果是全局的,为什么会导致错误,因为每个对象都可以访问javascript
中的
playlist
,这通常不是您所期望的。这就是为什么您应该在所有视图和集合初始化方法中使用下划线.js'
..bindAll(这是'methodname','methodname2',…)
方法来将其绑定到集合或视图的方法。使用
this.playlist
您将播放列表声明为
window.player
的一部分,因此可以使用
window.player.playlist
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!
        },
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
        });
    },