私は本当にこれに頭を包むことができません。何らかの理由で(非同期リクエストと関係があると思われます)、モデル属性が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});
}
});