所以我使用的是Ember 1.5.1和Ember-data 1.0.0 beta7
我有以下路线
App.Router.map ->
@resource "items"
@resource 'item', path: '/items/:id
项目是从服务器获取的。如果我开始这条路线,这两条路线就可以正常工作;奇怪的事情发生在我开始项目页面(/ items / 1),然后我尝试导航到/ items /通过一个链接,其中的动作由ItemController中的函数this.transitionToRoute(“items”)处理。我收到以下错误:
尝试过渡到项目ember.js?body = 1:3524
转换#2:items:调用beforeModel hook ember.js?body = 1:3524
转换#2:项目:调用deserialize hook ember.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 /,我仍然得到同样的错误。
答案 0 :(得分:6)
试试这个,在你的行动中添加以下代码
Ember.run.scheduleOnce('afterRender', this, function(){
this.transitionToRoute("items");
});
<强>更新强>
好的,只需检查一下你的堆栈跟踪。问题不在于transitionTORoute
。由于这是变形问题,因此很难直接调试。这可能实际上是由错误的车把表达引起的。
正如this link所指出的,一个简单的问题可能是使用HTML注释块。
{{!此评论不会出现在输出中}} &LT; ! - 此评论将出现在输出中 - &gt;
手动操作DOM。如果您手动删除脚本标记,那么它们将无法找到。
格式错误的HTML。假设您离开了一个开放的div,那么变形 - ## - end标记将嵌套在与开始标记不同的级别。
我从其他问题中提取了很多这些我认为可以帮到你的问题