Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “Ember.js”;“已销毁对象上的调用集”;调用unloadRecord后出错_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript “Ember.js”;“已销毁对象上的调用集”;调用unloadRecord后出错

Javascript “Ember.js”;“已销毁对象上的调用集”;调用unloadRecord后出错,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,在我正在处理的一个项目的会话系统中,我正在调用unloadRecord,记录如下: user.unloadRecord(); 我没有调用destroyRecord,因为我想从存储中手动卸载该记录,而不将其保存到服务器。以这种方式从存储中删除记录效果很好,但当我登录到同一个帐户时——这需要从服务器加载同一个用户记录,并使用store.push将其手动插入存储。我会收到以下错误消息: Uncaught Error: Assertion Failed: calling set on destroye

在我正在处理的一个项目的会话系统中,我正在调用
unloadRecord
,记录如下:

user.unloadRecord();
我没有调用
destroyRecord
,因为我想从存储中手动卸载该记录,而不将其保存到服务器。以这种方式从存储中删除记录效果很好,但当我登录到同一个帐户时——这需要从服务器加载同一个用户记录,并使用
store.push将其手动插入存储。我会收到以下错误消息:

Uncaught Error: Assertion Failed: calling set on destroyed object     ember.js:3902
在调用
user.unloadRecord()
之后,在下面的一行再次出现这种情况:

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

{
    "sessionToken":"f7a7247467b08818ead27441838df30fed0e0a79",
    "user": {
        "id":"5499bf5b7f25680761c9df7a",
        "email":"test@gmail.com",
        "accounts": [/* [account ids] */],
        "syncPaths":[/* [sync path ids] */]
    }
}
有没有办法避免这个错误

更新

为了响应查看更多代码的请求,是包含
unloadRecord
调用的文件,也是包含
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
只是“长度”,这并没有多大帮助。

你能发布更多的代码吗?您在哪里调用destroy?为什么需要手动重新加载用户记录?我认为,一旦卸载了记录,您就需要从服务器获取。@Oren,没有任何其他与错误相关的代码——这些行附近的所有其他内容都与加载
用户
记录无关。我已经用Github上相应文件的链接更新了这个问题。我从不调用
destroy
,因为我使用了堆栈溢出应答中解释的
unloadRecord
。@Matt,说来话长,但当用户登录时,我会使用用户的凭据向/session发出POST请求。请求返回一个会话令牌和一个
user
记录,然后我将其手动推入存储,如问题中所述。使用RESTAdapter加载用户是否是一个选项?可能通过创建LoginRestapter来处理会话/用户api请求,而不是使用ajax调用?我不能确定,但感觉像是Ajax调用和推送到商店的结合让Ember变得不稳定(它认为有一个RestaAdapter,但你有另一个Ajax调用,导致东西被推到商店)。你找到了解决问题的方法吗?有完全相同的错误,
keyName
只是
length
。有关于这个主题的新闻吗?我实际上刚刚找到了答案!您需要首先为每个关系模型调用
this.store.unloadAll()
DS.Model.extend({
    email: DS.attr("string"),
    accounts: DS.hasMany("account"),
    syncPaths: DS.hasMany("syncPaths")
});