【问题标题】:"(generated application controller)" displayed instead of value contents in Handlebars "#each" helper显示“(生成的应用程序控制器)”而不是 Handlebars “#each”助手中的值内容
【发布时间】:2015-11-25 21:16:37
【问题描述】:

我在 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}}

然后显示no值,结果是:

<li><a href="#" style="font-style: italic;">No values</a></li>

我在尝试迭代模型提供的数组时犯了什么错误?

【问题讨论】:

标签: javascript ember.js handlebars.js


【解决方案1】:

您没有正确使用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 的结果)。

  • 在您的第二次尝试中……嗯,这应该是一个语法错误,但似乎助手没有检查​​它收到的参数数量。所以没有错误,但它会默默地忽略其他参数。所以在这里,你最终调用了 each 助手,有 3 个参数:变量 dict(未定义)、变量 in(未定义)和变量 models.dictionaries(这是你的列表,但被忽略助手)。

    由于dict 未定义,else 块被执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多