我有这条路线,目前,当我转换回它时,给了我一个很大的错误,堆栈跟踪并没有帮助我弄清楚出了什么问题。
处理路由时出错:project.details断言失败:在销毁对象上调用set错误:断言失败:调用集 在被摧毁的物体 在新错误(本机) 在Error.EmberError(http://starqa.fmr.com/assets/vendor.js:22615:21) at Object.Ember.default.assert(http://starqa.fmr.com/assets/vendor.js:15716:13) 在Object.set(http://starqa.fmr.com/assets/vendor.js:26367:22) at exports.default.mixin.Mixin.create.set(http://starqa.fmr.com/assets/vendor.js:41034:20) 在Ember.Object.extend.flushCanonical(http://starqa.fmr.com/assets/vendor.js:69769:14) 在ember $ data $ lib $ system $ relationships $ state $ has_many $$ ManyRelationship.flushCanonical (http://starqa.fmr.com/assets/vendor.js:71525:22) 在Queue.invoke(http://starqa.fmr.com/assets/vendor.js:11425:18) at Object.Queue.flush(http://starqa.fmr.com/assets/vendor.js:11490:13) 在Object.DeferredActionQue
通过浏览我的路线和评论内容,我在项目路线中找到了这个:
export default Ember.Route.extend(AuthenticatedRouteMixin, {
model: function(params) {
if (params.q) {
return this.store.find('project', params);
} else {
var _this = this;
Ember.run(function() {
_this.store.unloadAll('project');
});
return this.store.findAll('project', {reload: true});
}
}
如果我评论第7-9行:
/*
Ember.run(function() {
_this.store.unloadAll('project');
});
*/
然后错误消失,过渡工作。这段代码是由其他人编写的,我认为它与从商店刷新模型有关,但我无法弄清楚它为什么会导致这个"在被破坏的对象上调用set"错误。
非常感谢任何帮助。
答案 0 :(得分:1)
看起来这条路线似乎同时服务于单个项目参数(指定了q)和所有项目,其中的副手听起来远非完美的余烬设计。理想情况下,您应该有两条路线 - 项目和项目路线。这是在Ember架构方面。
在功能方面,当你的对象被ember释放但你尝试再次访问它时会发生这种情况。我怀疑这是发生在Ember.run,在另一个循环中运行卸载,而我不认为这是需要的。尝试从ember循环中删除所有卸载,或者大多数情况下你可以在没有它的情况下运行(为什么你想在每次调用路由时删除当前缓存中的所有对象?
this.store.unloadAll('project');
return this.store.findAll('project', {reload: true});
或者只是将其注释掉(我认为留下评论应该适合你)。