我正在努力让我的模型更轻松。如果尚未获取模型,它只使用id
字段并自行获取。然后,我使用_.extend(this, fetchedModel)
更新this
。问题是,当我尝试将此获取和扩展模型设置为另一个模型中的属性时,我正在遇到循环活动 - othermodel.set("fetchedModel", fetchedModel)
。
是否有另一种方法来获取我的模型并简单地用刚刚获取的内容覆盖this
的整个当前实例?
这是我的上下文代码(我也在使用Parse):
load : function(success) {
debug("Loading workout...");
// if it's not grabbed, grab it
if(!this.createdAt) {
var q = new Parse.Query(Workout);
q.include("user");
return q.get(this.id, {
success : function(workout) {
_.extend(this, workout);
this.load(success);
}.bind(this)
});
}
感谢。
答案 0 :(得分:3)
无限递归是由调用load
的方法this.load
中的成功回调引起的,即本身。
要重置模型的属性,_.extend(this, workout)
不是正确的方法。这会将workout
的属性复制到模型对象本身。您要做的是使用Model#set
更新模型的内部attributes
对象:
this.set(workout);
如果要确保新属性不仅覆盖旧属性,还要清除新对象中不存在的任何先前属性,还要调用Model#clear
:
this.clear();
this.set(workout);
顺便说一下,通常更新Backbone模型,你只需调用Model#fetch
,就像这样:
this.fetch({
success: function() {
//model has been updated...
}
});
唉,我不知道parse.com的最佳做法是什么。 Parse.Object
seems to mention the fetch method的文档。