【问题标题】:How to lookup associative array/object value in Ember template using string key如何使用字符串键在 Ember 模板中查找关联数组/对象值
【发布时间】:2015-12-14 22:12:29
【问题描述】:

我知道在 Ember 中(按键)查找数组值的传统语法是使用 .[] 语法,例如:

{{myArray.[0]}}

但是,我有一个关联数组,尽管有一个单独的模型/控制器属性列出了键,但我无法执行查找 - 值始终为 undefined

作为一个例子,这里是一个简单的控制器:

App.IndexRoute = Ember.Route.extend({
    model: function () {
        var ret = [];
        ret['notGreat'] = ['Plain Yogurt', 'Clams'];
        ret['great'] = ['Pizza', 'Chicken'];
        return Ember.RSVP.hash({
            keys: ['great', 'notGreat'],
            array: ret
        });

    }
});

我的模板使用:

    {{#each key in model.keys}}
      <li>{{key}}</li>
      {{#each subItem in model.array.[key]}}
          <li>Subitem: {{subItem}}</li>

虽然model.array.[key] 似乎总是未定义。在 Ember 中进行关联数组查找有技巧吗?我也很乐意编写像getFoodsWithKey(key) 这样的控制器函数,但没有找到任何资源表明调用控制器函数(与支持其缓存范例的计算属性相反,不't allow parameters) 是可能的。

JSFiddle(数组表示法):http://jsfiddle.net/6Evrq/786/

JSFiddle(对象属性表示法):http://jsfiddle.net/6Evrq/787/

【问题讨论】:

  • 请注意,JS 没有“关联数组”,尽管它确实有可以通过键来完成相同事情的对象。简而言之,var ret = []; ret['foo'] = 'bar'; 不合适,不应该使用。相反,请使用var ret = {}; ret['foo'] = 'bar';。另见:stackoverflow.com/q/874205/84473

标签: javascript arrays ember.js


【解决方案1】:

如果您使用的是 Ember 2.0+,您可以使用 each-in helper 宣布的 here

模板将变为:

<ul>
{{#each-in model.array as |key value|}}
  <li>{{key}}: {{value}}</li>
{{/each-in}}
</ul>

get helper 也可用于通过其键获取特定值:

{{get items 'Item 1'}}
{{get items somePathWithAKey}}

JSBin demo

【讨论】:

  • 太好了,谢谢 - 这适用于您想要打印 所有 元素(及其键)的情况,这就是我所描述的。但作为附录,您是否知道在给定特定 key 的情况下是否可以访问value
  • @CraigOtis 是的,您可以使用 get 助手。用示例更新了我的帖子和演示。不幸的是,我在官方文档中找不到这个,只有公告链接。
猜你喜欢
  • 1970-01-01
  • 2019-07-22
  • 2019-12-26
  • 2020-02-01
  • 1970-01-01
  • 2016-05-13
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多