我真的无法绕过这一个。出于某种原因,(我怀疑它有某些与异步请求有关)我的模型属性没有使用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});
}
});
答案 0 :(得分:1)
fetchRelated
返回jqXHR
个对象的数组,你需要以$。这样使用它:
$.when.apply(null, usermodel.fetchRelated("movies")).then(function(){
var newview = new UserMovieList({model: usermodel});
newview.render();
});