Ember.js"在被破坏的对象上调用set"调用unloadRecord后出错

时间:2015-01-02 18:02:27

标签: javascript ember.js ember-data

在我正在处理的项目的会话系统中,我在这样的记录上调用unloadRecord

user.unloadRecord();

我没有调用destroyRecord因为我想从商店手动卸载记录而不将其持久保存到服务器。以这种方式从商店中删除记录非常有效,但是当我登录到同一个帐户时 - 这需要从服务器加载相同的用户记录并使用store.push手动将其插入商店 - 我得到了以下错误消息:

Uncaught Error: Assertion Failed: calling set on destroyed object     ember.js:3902

再次,这发生在调用user.unloadRecord()之后的行:

var user = this.store.push("user", response.user);

responsePOST请求返回/ session的JSON有效负载,其中的示例如下所示:

{
    "sessionToken":"f7a7247467b08818ead27441838df30fed0e0a79",
    "user": {
        "id":"5499bf5b7f25680761c9df7a",
        "email":"test@gmail.com",
        "accounts": [/* [account ids] */],
        "syncPaths":[/* [sync path ids] */]
    }
}

有没有办法避免这个错误?

更新

为了回应查看更多代码的请求,here是包含unloadRecord调用的文件,here是包含store.push调用的文件。< / p>

更新2 : 我按要求包含了一个POST请求返回给/ session的JSON有效负载的示例。以下是user的模型:

DS.Model.extend({
    email: DS.attr("string"),
    accounts: DS.hasMany("account"),
    syncPaths: DS.hasMany("syncPaths")
});

1 个答案:

答案 0 :(得分:3)

尽管有unloadAll(),但我一直在努力寻找类似的东西。 其他人建议这样做,所以也许它会帮助你。

在源代码中ember.jsember.debug.js如果在本地运行,请找到以下行:

Ember['default'].assert('calling set on destroyed object', !obj.isDestroyed);

并将其更改为:

Ember['default'].assert("calling set ('" + keyName + "') on destroyed object", !obj.isDestroyed);

然后您会看到正在设置的属性,它可能会帮助您找到代码中挂起的位置。对我来说,keyName只是&#34;长度&#34;这不是很有帮助。