我正在尝试渲染一个名为stat-table
的组件到以下模板:
<script type="text/x-handlebars" id="table">
<h3>{{name}}</h3>
{{stat-table rows=rows}}
</script>
其中rows
为Table
模型的hasMany
与row
模型的关系。下面是组件模板(tagName
是"table"
):
<script type="text/x-handlebars" id="components/stat-table">
{{#each rows}}
<tr>
<td>test</td>
</tr>
{{/each}}
</script>
第一次加载组件时,它会完美地呈现。但是,如果我切换到不同的视图(具有stat-table
组件的表视图未呈现),然后切换回来,我会在控制台中得到以下神秘的错误:
Uncaught #<error> ember.js:73
我使用statTableComponent
的init
函数做了一些窥探,包括如下:
App.StatTableComponent = Ember.Component.extend({
tagName: "table",
classNames: ["stat-table"],
init: function() {
this._super();
this.get("rows")
.then(function(rows) {
console.log(rows);
});
}
});
在上面的代码中,错误在rows
的承诺解决之前触发。错误可能会发生,因为#each
助手试图在解决之前迭代rows
的承诺,但我不确定为什么这只会在第二次视图加载后发生…
如何让组件在每次渲染时都顺利加载?
Update- Full Stack Trace of Error:
Uncaught #<error> ember.js:73
Ember.assert ember.js:73
(anonymous function) ember.js:30066
sendEvent ember.js:2599
Ember.Evented.Ember.Mixin.create.trigger ember.js:18317
superFunction ember.js:7723
Ember.CoreView.Ember.Object.extend.trigger ember.js:22507
superWrapper ember.js:1292
Ember.View.Ember.CoreView.extend.triggerRecursively ember.js:24061
superWrapper ember.js:1292
(anonymous function) ember.js:25652
Ember.EnumerableUtils.forEach ember.js:1932
ViewCollection.forEach ember.js:22611
insertViewCollection ember.js:25649
Ember.merge.ensureChildrenAreInDOM ember.js:25635
Ember.ContainerView.Ember.View.extend._ensureChildrenAreInDOM ember.js:25587
DeferredActionQueues.flush ember.js:6127
Backburner.end ember.js:6215
Backburner.run ember.js:6254
Ember.run ember.js:6664
Ember.EventDispatcher.Ember.Object.extend._bubbleEvent ember.js:22294
(anonymous function) ember.js:22243
n.event.dispatch jquery.js:4409
r.handle jquery.js:4095
您的表缺少<tbody>
标记http://emberjs.com/blog/2014/03/30/ember-1-5-0-and-ember-1-6-beta-released.html.