提问者:小点点

无法对不在DOM中的Metamorph执行操作


所以我使用的是Ember 1.5.1和Ember-data 1.0.0 beta7

我有以下路线

App.Router.map-

项目是从服务器获取的。如果我从该路由开始,这两个路由工作得很好;当我在项目页面(/项目/1)上开始时,会发生奇怪的事情,然后我尝试通过ItemController中的this. transtionToRoute("项目")函数处理的操作链接导航到 /items/。我得到了以下错误:

尝试转换到项目ember. js?body=1:3524

过渡#2:项目:调用beforeModel钩子ember. js?body=1:3524

过渡#2:项目:调用反序列化钩子emer. js?body=1:3524

Error while loading route: Error: Cannot perform operations on a Metamorph that is not in the DOM.
at Metamorph.checkRemoved (http://localhost:3000/assets/ember.js?body=1:27009:15)
at Metamorph.html (http://localhost:3000/assets/ember.js?body=1:26979:12)
at Object.DOMManager.empty (http://localhost:3000/assets/ember.js?body=1:27974:16)
at Object.Ember.merge.empty (http://localhost:3000/assets/ember.js?body=1:25139:21)
at Ember.CollectionView.Ember.ContainerView.extend.arrayWillChange (http://localhost:3000/assets/ember.js?body=1:25962:25)
at Object.sendEvent (http://localhost:3000/assets/ember.js?body=1:2600:14)
at Ember.Array.Ember.Mixin.create.arrayContentWillChange (http://localhost:3000/assets/ember.js?body=1:15317:11)
at superFunction [as _super] (http://localhost:3000/assets/ember.js?body=1:7726:16)
at RecordArray.extend.arrayContentWillChange (http://localhost:3000/assets/ember-data.js?body=1:7624:28)
at superWrapper [as arrayContentWillChange] (http://localhost:3000/assets/ember.js?body=1:1295:16) 

转换#2:项目:转换已中止

然而,我再次点击链接,转换成功了。然后无论我如何在两条路线之间导航,一切都很好。

我最初的猜测是,当我尝试转换时,并不是所有的记录都已加载,但是即使我从 /items/开始 /items/1然后尝试返回 /items/,我仍然得到相同的错误。


共1个答案

匿名用户

试试这个,在你的操作中添加以下代码

Ember.run.scheduleOnce('afterRender', this, function(){
    this.transitionToRoute("items");
});

更新:

好的,刚刚检查了您的stacktrace。问题不是因为转换TORoute。由于这是元变形问题,直接调试有点困难。这实际上可能是由错误的车把表达式引起的。

>

  • 正如本链接所指出的,一个简单的问题可以是使用超文本标记语言注释块。

    {{!此注释不会在输出中}}

    手动操作DOM。如果您手动删除脚本标记,那么,它们将找不到。

    格式错误的超文本标记语言。假设您留下了一个打开的div,那么metamtom-##-end标记将嵌套在与start标记不同的级别。

    我从其他问题中提取了很多这些观点,我认为可能会对你有所帮助