1

我完成了 peepcodebackbone.js 基础教程,据我所知,我的代码与截屏视频相同,但我的控制台行为非常不同。

我的 Chrome 控制台(在 screecast 中使用)产生了这个结果。

albums = new Albums()
child
albums.fetch()
Object
albums.models()
TypeError: Property 'models' of object [object Object] is not a function

截屏控制台看起来像这样

albums = new Albums()
inherits.child
albums.fetch()
inherits.child
albums.models()
[ inherits.child, inherits.child ]

我完全不知道这是在哪里分崩离析。是我的代码(见下文)、我的浏览器还是其他什么?

(function($) {

window.Album = Backbone.Model.extend({

    isFirstTrack: function(index) {
        return index == 0;
    },

    isLastTrack: function(index) {
        return index >= this.get('tracks').length - 1;
    },

    trackUrlAtIndex: function(index) {
        if (this.get('tracks').length >= index) {
            return this.get('tracks')[index].url;
        }
        return null;
    }

});

window.Albums = Backbone.Collection.extend({
    model: Album,
    url: "/albums"
});


window.AlbumView = Backbone.View.extend({
    tagName: 'li',
    className: 'album',

    initialize: function() {
        _.bindAll(this, 'render');
        this.model.bind('change', this.render);

        this.template = _.template($('#album-template').html());
    },

    render: function() {
        var renderedContent = this.template(this.model.toJSON());
        $(this.el).html(renderedContent);
        return this;
    }

});

})(jQuery)
4

1 回答 1

1

您的代码很好,示例/截屏有错误或正在使用较旧的backbonejs 实现并且正在使用较旧的chrome,因此child vs inherits.child 输出。

  • fetch 应该返回对象 - 它是一个 jquery 延迟对象,您可以使用它来解决成功和错误回调(在 jquery API 文档中查看更多关于 jquery deferred - 很棒的东西!)
  • 没有Backbone.Collection模型方法 - 它是模型实例上的一个属性,应该由albums.models而不是访问albums.models()
于 2012-07-17T13:01:05.480 回答