Ember.js Ember TypeError:调用控制器func时不支持的内容
所以我对余烬还很陌生,遇到了一个TypeError异常,说“不受支持的内容”,并且能够找到很少的文档/内容,通常是关于余烬的原因。触发此异常的是试图从模板中的控制器调用函数 routes/dashboard.jsEmber.js Ember TypeError:调用控制器func时不支持的内容,ember.js,Ember.js,所以我对余烬还很陌生,遇到了一个TypeError异常,说“不受支持的内容”,并且能够找到很少的文档/内容,通常是关于余烬的原因。触发此异常的是试图从模板中的控制器调用函数 routes/dashboard.js export default Ember.Route.extend({ model: function(params){ return ['Chart1', 'Chart2', 'Chart3'] }, setupController: function(contr
export default Ember.Route.extend({
model: function(params){
return ['Chart1', 'Chart2', 'Chart3']
},
setupController: function(controller, charts) {
controller.set('charts', charts);
}
});
export default Ember.ArrayController.extend({
something: function() {
return 'something!';
}
});
控制器/dashboard.js
export default Ember.Route.extend({
model: function(params){
return ['Chart1', 'Chart2', 'Chart3']
},
setupController: function(controller, charts) {
controller.set('charts', charts);
}
});
export default Ember.ArrayController.extend({
something: function() {
return 'something!';
}
});
dashboard.hbs
{{#each chart in charts}}
<div class='widget well'>
{{ chart }}
</div>
{{/each}}
{{something}}
{{{#图表中的每个图表}
{{chart}}
{{/每个}}
{{something}}
虽然模板可以成功地在传入的数组上循环,但尝试调用函数“something”会引发错误并阻止加载模板。你知道我搞砸了什么吗?使用computed属性应该可以解决这个问题:
export default Ember.ArrayController.extend({
something: Ember.computed(function() {
return 'something!';
})
});
计算属性是Ember中需要理解的核心概念。它们由您必须提供的函数支持,并缓存返回值
您试图做的不是使用computed属性,而是显示一个函数
。HTMLBars中不支持它,它将引发TypeError
:
未捕获类型错误:不支持的内容
为什么呢?这是因为底层的HTMLBars逻辑。它检查您试图显示的内容的类型:
var type = typeof content;
然后,根据类型,它选择在DOM中显示值的正确方法:
switch (type) {
case 'string':
if (this.parseTextAsHTML) {
return this.domHelper.setMorphHTML(this, content);
}
return this.setText(content);
case 'object':
if (typeof content.nodeType === 'number') {
return this.setNode(content);
}
/* Handlebars.SafeString */
if (typeof content.string === 'string') {
return this.setHTML(content.string);
}
if (this.parseTextAsHTML) {
return this.setHTML(content.toString());
}
/* falls through */
case 'boolean':
case 'number':
return this.setText(content.toString());
default:
throw new TypeError('unsupported content');
}
正如您所看到的,
函数没有任何理由
,它会一直运行到默认处理程序。您不能以这种方式显示函数
,因为Ember不知道是应该先执行它并显示函数的结果还是显示函数体。ArrayController已被弃用。此外,每个帮助器的语法也已更改。现在应该使用block paramsDon,不要忘记指定任何必需的依赖项keys@Daniel,你能解释一下你建议的解决方案吗?我不知道是什么原因导致了这个错误。谢谢