backbone.js fetch()返回对象而不是子对象

backbone.js fetch() returning object instead of child

本文关键字:对象 返回 js fetch backbone      更新时间:2023-11-15

我正在学习peepcode backbone.js基础教程,据我所知,我的代码与屏幕广播相同,但我的控制台行为非常不同。

我的Chrome控制台(用于屏幕播放)产生了这个结果。

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)

您的代码很好,示例/screencast有错误,或者正在使用较旧的backbonejs实现,并且正在使用较老的chrome,因此child与herits.child输出。

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