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を'change'でバインドしてレンダリングすると、レンダリングされますが、0.5秒ほど後に...}、

私のユーザーモデルは次のように定義されています。

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.apply(null, usermodel.fetchRelated("movies")).then(function(){
    var newview = new UserMovieList({model: usermodel});
    newview.render(); 
});
于 2012-05-25T09:21:14.990 に答える