编程语言
首页 > 编程语言> > javascript-调用unloadRecord后,Ember.js“在被破坏的对象上调用集”错误

javascript-调用unloadRecord后,Ember.js“在被破坏的对象上调用集”错误

作者:互联网

在我正在处理的项目的会话系统中,我在像这样的记录上调用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);

响应是POST请求返回给/ session的JSON有效负载,此处显示了一个示例:

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

有什么办法可以避免这个错误?

更新:

为了响应查看更多代码的请求,here是包含unloadRecord调用的文件,而here是包含store.push调用的文件.

更新2:
我提供了一个示例,该示例由POST请求返回给/ session所请求的JSON有效负载.这是用户模型:

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

解决方法:

我一直在努力寻找类似的东西,尽管使用了unloadAll().
有人建议这样做,所以也许会对您有所帮助.

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

Ember [‘default’].assert(‘被破坏对象的调用集’,!obj.isDestroyed);

并将其更改为:

Ember [‘default’].assert(“正在销毁对象上的调用集(‘”“ keyName”’)“,!obj.isDestroyed);

然后,您将看到已设置的属性,它可以帮助您跟踪代码在哪里挂起.对我来说,keyName只是“ length”,并不是很有用.

标签:ember-js,ember-data,javascript
来源: https://codeday.me/bug/20191120/2047438.html