backbonejs:无法调用未定义的方法'bind'

时间:2012-06-12 11:06:48

标签: javascript jquery backbone.js

我目前正在通过截屏教程学习backbone.js,在此过程中,我的代码似乎停止工作,在Chrome的javascript控制台中抛出错误Cannot call method 'bind' of undefined。错误的行包含在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并扩展this.collection.trigger('select', this.model);的{​​{1}}中,我看不到window.AlbumView中任何位置定义的任何集合,但不会抛出任何错误。这似乎让我很困惑。

JSFIDDLE

修改

错误已修复,因为而不是

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

1 个答案:

答案 0 :(得分:3)

Backbone Views包含集合或模型,因为视图用于显示模型或模型集合中包含的数据。

此示例抛出错误,因为尚未定义this.collection。为此,您需要初始化一些集合,然后将其传递给您的视图。

new PlayListView({collection: someCollection});