我正在EmberJS中使用application.hbs
模板,并创建一个由模型内容填充的动态下拉菜单。我的路线/模型定义如下:
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
dictionaries: ['One', 'Two', 'Three'],
test: 'Value'
});
}
});
在我的模板中,如果我使用{{model.test}}
,那么它会成功打印"Value"
但是:当我尝试使用model.dictionaries
的值构建列表时,两次尝试都失败了,尽管不同。
这种方法:
{{#each model.dictionaries}}
<li><a href="#">{{this}}</a></li>
{{else}}
<li><a href="#" style="font-style: italic;">No values</a></li>
{{/each}}
构建一个包含3个条目的列表,但它们的内容是:
<li><a href="#">(generated application controller)</a></li>
<li><a href="#">(generated application controller)</a></li>
<li><a href="#">(generated application controller)</a></li>
如果我试着给每个项目分配一个名称:
{{#each dict in model.dictionaries}}
<li><a href="#">{{dict}}</a></li>
{{else}}
<li><a href="#" style="font-style: italic;">No values</a></li>
{{/each}}
然后不显示值,结果是:
<li><a href="#" style="font-style: italic;">No values</a></li>
我在尝试迭代模型提供的数组时犯了什么错误?
您没有正确使用each
帮助程序。Ember实际上使用了HTMLBars,它的语法类似于手柄,但引入了一些差异,以使数据绑定更容易。这应该可以解决你的问题,我相信:
{{#each model.dictionaries as |somename|}}
<li><a href="#">{{somename}}</a></li>
{{else}}
<li><a href="#" style="font-style: italic;">No values</a></li>
{{/each}}
错误解释:
在第一次尝试中,显示
this
。在模板中,this
是一个特殊的名称,指的是模板所附的控制器或组件。在这里,它是一个自动生成的控制器,因此您可以看到(这是在生成的控制器上调用toString
的结果)。在您的第二次尝试中……这应该是一个语法错误,但助手似乎没有检查它收到的参数数量。所以没有错误,但它默默地忽略了其他参数。因此,在这里,您最终调用了具有3个参数的
each
助手:变量dict
(未定义)、变量in
(未定义的)和变量models.dictionaries
(这是您的列表,但被助手忽略)。由于未定义
dict
,因此执行else
块。