无法获取计算属性中的数组值

时间:2017-08-25 22:06:25

标签: ember.js

我在Ember中遇到计算属性问题。

有问题的项目是timeZones,其设置如下:

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return Ember.RSVP.hash({
      account: this.store.findRecord('account', params.id),
      timeZones: this.store.findAll('time-zone'), <------------ timeZones
      users: this.store.query('user', { by_account_id: params.id })
    });
  },

  setupController(controller, model) {
    this._super(controller, model.account);
    controller.set('users', model.users);
    controller.set('timeZones', model.timeZones);
  }
});

然后我有一个名为selectedTimeZone的东西,如下所示:

  selectedTimeZone: Ember.computed('location.timezone', 'timeZones', function() {
    console.log(this.get('timeZones'));

    const timeZoneName = this.get('location.timezone');
    var result;

    this.get('timeZones').forEach(function(timeZone) {
      if (timeZone.name === timeZoneName) {
        console.log('yes'); // <------------------- never gets here
        result = timeZone;
      }
    });

    return result;
  }),

问题是this.get('timeZones')在组件内部无法真正访问。 timeZones使模板很好。我正在填写timeZones的下拉列表。但是当我console.log时,它就会以Class的形式出现。

如何在这个计算属性中找到timeZones

1 个答案:

答案 0 :(得分:0)

实际上大部分看起来都不错,但是缺少一些代码。就像这是一个组件或控制器,如果它是一个组件,组件是如何被调用的?

然而,一个问题是显而易见的。 timeZone显然是ember-data记录,因此访问timeZone.name不是一个好主意。您应该使用余烬.get()timeZone.get('name')Ember.get(timeZone, 'name')

接下来你的依赖关键是错误的。由于您使用每个name的{​​{1}},因此应将依赖关键字timeZone替换为timeZone

使用findBy

最后使用较小版本的CP
timeZone.@each.name

如果无效,您应验证数据是否已使用ember检查器成功加载到商店中,并验证是否已将selectedTimeZone: Ember.computed('location.timezone', 'timeZones.@each.name', function() { const timeZoneName = this.get('location.timezone'); return this.get('timeZones').findBy('name', timeZoneName); }), 传递到timeZones的组件中从控制器调用组件时。