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

标签 javascript jquery ember.js ember-data url-routing

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

我有以下路线

App.Router.map -> @resource“元素” @resource 'item', 路径: '/items/:id

项目是从服务器获取的。如果我从那条路线开始,这两条路线可以正常工作;当我从项目页面 (/items/1) 开始时,发生了奇怪的事情,然后我尝试通过链接导航到/items/,该链接包含由 ItemController 中的函数 this.transitionToRoute("items") 处理的操作。我收到以下错误:

尝试过渡到项目 ember.js?body=1:3524

转换 #2:项目:调用 beforeModel 钩子(Hook) ember.js?body=1:3524

转换 #2:项目:调用反序列化钩子(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/,我仍然得到同样的错误。

最佳答案

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

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

更新:

好的,刚刚检查了您的堆栈跟踪。问题不是因为 transitionTORoute。由于这是变形问题,因此很难直接调试。这实际上可能是由错误的 handlebars 表达式引起的。

  • 正如 this link 中指出的那样, 一个简单的问题可以是使用 HTML 注释 block 。

    {{!此注释不会出现在输出中}}
    < !-- 这个注释会出现在输出中 -->

  • 手动操作 DOM。如果您手动删除脚本标签,那么它们将不会被发现。

  • 格式错误的 HTML。假设您留下了一个打开的 div,那么 metamorph-##-end 标签将嵌套在与开始标签不同的级别。

我从其他问题中提取了很多我认为可能对你有帮助的观点

关于javascript - 无法对不在 DOM 中的 Metamorph 执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056525/

相关文章:

javascript - D3 网格线和刻度值问题

javascript - 在react input中没有输入时显示信息

javascript - 可拖动的非模态弹出 Jquery Mobile

javascript - 特定 ember 组件的设置值

javascript - Rails : Not ember, 不是 JS 响应,而是介于两者之间的东西

javascript - 是否有悬停或 mouseenter/mouseleave 的切换?

javascript - 属性 'undefined' 中的表达式 'row' 与指令 'uiGridHeaderCell' 一起使用

jquery - imagecube js立方体旋转错误

php - 在 javascript 中使用 php 函数

ember.js - Ember 数据处理服务器错误