1

我真的无法绕过这个。出于某种原因,(我怀疑它与异步请求有关)我的模型属性没有使用 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 与“更改”绑定到渲染,那么它将渲染,但在半秒左右之后......},

我的用户模型定义如下:

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

1 回答 1

1

fetchRelated返回对象数组jqXHR,您需要以这种方式将其与 $.when 一起使用:

$.when.apply(null, usermodel.fetchRelated("movies")).then(function(){
    var newview = new UserMovieList({model: usermodel});
    newview.render(); 
});
于 2012-05-25T09:21:14.990 回答