Backbone.js的的toJSON()不包括属性(Backbone.js toJSON() no

2019-10-16 17:50发布

我真的不能满脑子都在这一个。 出于某种原因,(我怀疑它与异步请求)使用正确的的toJSON()函数我的模型属性没有被转换。 FWIW,我试图做延迟加载与Django的关系fetchRelated()。

这里就是我所做的fetchRelated()请求,并创建一个新的观点。

$.when(usermodel.fetchRelated("movies")).then(function(){
        var newview = new UserMovieList({model: usermodel});
        newview.render(); 
    });

这会调出以下渲染功能:

render: function(){
        $(this.el).html(this.template({}));

        var usermodel = this.model; 

        var wrapper = $(".movies");
            var recipes = usermodel.get("movies");
            movies.each(function(movie){
                var movie_item = new UserMovieListItem({
                    model:movie
                });
                movie_item.render(); 
                wrapper.append(movie_item.el);
            });
        return this; 

然后调用UserMovieListItem渲染功能:

render: function(){
        console.log("movies to JSONify", this.model.attributes);
console.log("movies JSONified", this.model.toJSON());
        $(this.el).html(this.template(this.model.toJSON()));
        return this; 

这里是踢球。 所述第一的console.log(this.model.attributes)显示所有的属性,因为它们应该的。 这似乎完全正常。 但(this.model.toJSON())只返回了其中的fetchRelated()之前提供的URI和id属性。 到底是什么怎么回事? 如果我绑定this.model在UserMovieListItem与“变革”来渲染,然后它呈现,但在半秒左右...},

我的用户模型定义为这样的:

window.User = Backbone.RelationalModel.extend({
    urlRoot: '/movie/api/v1/users/',
    relations: [{
        type: Backbone.HasMany,
        key: 'movies',
        relatedModel: 'Movie',
        collectionType: 'UserMovieCollection',
        reverseRelation: {
            key: 'user',
            includeInJSON: 'id'
        }
    }],
    select: function(){
        var model = this; 
        model.set({selected: true});
    }
});

Answer 1:

fetchRelated返回数组jqXHR对象,你需要用$。当这样使用它:

$.when.apply(null, usermodel.fetchRelated("movies")).then(function(){
    var newview = new UserMovieList({model: usermodel});
    newview.render(); 
});


文章来源: Backbone.js toJSON() not including attributes