Backbone.js toJSON()不包括属性

时间:2012-05-25 06:36:57

标签: javascript asynchronous backbone.js backbone-relational

我真的无法绕过这一个。出于某种原因,(我怀疑它有某些与异步请求有关)我的模型属性没有使用toJSON()函数正确转换。 FWIW,我正在尝试使用django-relational 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属性。到底发生了什么事?如果我将UserMovieListItem中的this.model与'change'绑定到render,那么它渲染,但是在半秒左右之后......         },

我的用户模型定义如下:

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});
    }
});

1 个答案:

答案 0 :(得分:1)

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

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