0

我试图让加载我的模型更容易。如果尚未获取模型,则它只需使用该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)
        });
    }

谢谢。

4

1 回答 1

3

无限递归是由方法load调用中的成功回调this.load,即自身引起的。

重置模型的属性,_.extend(this, workout)不是正确的方法。这会将 的属性复制workout到模型对象本身中。您要做的是attributes使用以下方法更新模型的内部对象Model#set

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 似乎提到了 fetch 方法

于 2013-02-26T20:06:10.013 回答