"(generated application controller)"显示,而不是在帮助程序的车把"#each"值内容



我正在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块。

最新更新