使用 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 中定义。
当我加载页面时,控制台日志显示:
日志:STATEMANAGER:输入 noSectionSelected SCRIPT438:对象不支持此属性或方法 ember-0.9.7.1.min.js,第 10 行字符 30680 SCRIPT5022:无法对不在 DOM 中的 Metamorph 执行操作。 ember-0.9.7.1.min.js,第 13 行字符 29412 SCRIPT5022:抛出异常但未捕获 ember-0.9.7.1.min.js,第 13 行字符 16607
使用 IE 的调试器 (eww) 中断第一个错误,我可以看到错误似乎发生在 #each metamorph 标记上。它打破了这一行:
g.prototype.checkRemoved=function(){if(this.isRemoved())throw new Error("Cannot perform operations on a Metamorph that is not in the DOM.")}
因为 this.isRemoved() 返回 true。在调试器中检查this
我看到this.start
== "metamorph-6-start"。如果我在工作浏览器中搜索那个变形标记,它似乎是#each
我模板中块的开始标记。
sectionBinding 是一个从 jQuery .ajax 调用加载的数组,所以最初它是 [] ,然后使用this.get('sections').pushObject(section);
while 在我的控制器中循环 ajax 调用的结果来填充。
在此状态下,我没有进行任何动态视图的附加或删除,它只需要在它们从 ajax 服务调用返回时加载视图并绑定这些部分。
任何人都可以在这个问题上指出我正确的方向吗?谢谢!
编辑:更新到 Ember 0.9.8.1,现在控制台中少了一个错误:
日志:STATEMANAGER:输入 noSectionSelected SCRIPT5022:无法对不在 DOM 中的 Metamorph 执行操作。 ember-0.9.8.1.min.js,第 14 行字符 4051 SCRIPT438:对象不支持此属性或方法 ember-0.9.8.1.min.js,第 10 行字符 31677