English 中文(简体)
"不能在不在DOM的变形体上执行操作" - 仅以 IE8 表示
原标题:"Cannot perform operations on a Metamorph that is not in the DOM" - in <= IE8 only
  • 时间:2012-05-23 19:19:19
  •  标签:
  • ember.js

使用Ember 0.9.7.1

当应用程序启动并输入第一个状态时, 在 IE8 和下面获取这个错误 。 我有一个相当大的应用程序, 所以我不确定我可以在 JsFiddle 中复制, 但我会尝试显示下面的相关位 。

我看过GitHub的类似问题, 但我认为两者都没有确切地描述我做错了什么(我...对吗?

https://github.com/emberjs/ember.js/issues/752
https://github.com/emberjs/ember.js/issues/447

我的应用程序初始视图是由州经理创建/装入的, 例如:

SYOS.stateManager = Em.StateManager.create({

    enableLogging: true,
    rootElement: #syos-root,
    initialState:  noSectionSelected ,

    noSectionSelected: Ember.ViewState.create({

        view: SYOS.SelectSectionView,

        chooseSection: function (manager, context) {

            manager.goToState( sectionSelected );

        }

    }),
<snip>

这一看法的基本定义是:

SYOS.SelectSectionView = Em.View.extend({

templateName:  selectSectionView ,
sectionsBinding:  SYOS.sectionController.sections 
});

被剥除的模板版本看起来是这样的 :

<script type="text/x-handlebars" data-template-name="selectSectionView">

<h2>Some markup</h2>

<table class="select-sect" cellspacing="0">
{{#each sections}}
    {{#view SYOS.SelectSectionRowView sectionBinding="this" tagName="tr"}}
    <td class="sect">{{section.name}}</td>
    {{/view}}
{{/each}}
</table>

</script>

此模板在我的 html 中直接定义, 如果有用的话 。

当我装入控制台日志显示的页面时 :

LOG: STATEMANAGER: Entering noSectionSelected 
SCRIPT438: Object doesn t support this property or method 
ember-0.9.7.1.min.js, line 10 character 30680
SCRIPT5022: Cannot perform operations on a Metamorph that is not in the DOM. 
ember-0.9.7.1.min.js, line 13 character 29412
SCRIPT5022: Exception thrown and not caught 
ember-0.9.7.1.min.js, line 13 character 16607

使用 IE s 调试器( wew) 打破第一个错误, 我可以看到# each 变形标签的错误 semsems 正在发生。 它在此行断开 :

g.prototype.checkRemoved=function(){if(this.isRemoved())throw new Error("Cannot perform operations on a Metamorph that is not in the DOM.")}

因为此. isRemoved () 正在返回真实 。 在调试器中查看 < code> this 我可以看到 < code> its. start = = = = = “ moteform-6- start ” 。 如果我在工作浏览器中搜索该变形标记, 似乎就是模板中 < code_ each 块的起始标记 。

区域Binding 是一个从 jQuery. ajax 调用中装入的数组, 所以最初是 [ ], 然后使用 < code> thiss. get ( section). pushObject( section) ; 来进行调用, 同时在我控制器中循环ajax调用结果 。

在此状态下,我不会做任何动态视图的附加或删除, 它只需要加载视图, 并绑紧部分, 当它们从 ajax 服务电话中返回时 。

谁能帮我指点一下这个方向吗?

Ember 0.9.8.1: 更新为 Ember 0.9.8.1, 现在控制台有少一个错误 :

LOG: STATEMANAGER: Entering noSectionSelected 
SCRIPT5022: Cannot perform operations on a Metamorph that is not in the DOM. 
ember-0.9.8.1.min.js, line 14 character 4051
SCRIPT438: Object doesn t support this property or method 
ember-0.9.8.1.min.js, line 10 character 31677
最佳回答

跟进这件事 给外面所有食人怪 做我该做的 解决这个问题。

简而言之,我通过彻底修改我的观点 解决了这个问题, 他们是如何重新加入应用程序的。

我想高呼一下建议,任何与一个Ember App有怪异之处的人使用Debug 版本的 Ember 来运行他们的应用程序。 控制台提供的说法和反馈非常宝贵。

事实上,我有两个问题:

1) 在构建上表的each 中,我与另一个each 有一处,我在那里使用一个捆绑的把手把手助手(见