Backbone.js toJSON() 不包括属性
Posted
技术标签:
【中文标题】Backbone.js toJSON() 不包括属性【英文标题】:Backbone.js toJSON() not including attributes 【发布时间】:2012-05-25 06:36:57 【问题描述】:我真的无法理解这个。出于某种原因,(我怀疑它与异步请求有 something)我的模型属性没有使用 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);
);
【问题讨论】:
能否添加usermodel
的定义和usermodel.fetchRelated("recipes")
的JSON 响应,顺便检查$.when(usermodel.fetchRelated("recipes"))
是否正在设置模型属性
我刚刚意识到我有一个错字——尽管这不会影响代码。我也会更新我的问题。
如果我在 .then(function());它表明属性已被应用并更新到相关的电影模型。
【参考方案1】:
fetchRelated
返回jqXHR
对象的数组,您需要将它与 $.when 一起使用:
$.when.apply(null, usermodel.fetchRelated("movies")).then(function()
var newview = new UserMovieList(model: usermodel);
newview.render();
);
【讨论】:
以上是关于Backbone.js toJSON() 不包括属性的主要内容,如果未能解决你的问题,请参考以下文章