我真的无法绕过这个。出于某种原因,(我怀疑它与异步请求有关)我的模型属性没有使用 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});
}
});