我在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
?
答案 0 :(得分:0)
timeZone
显然是ember-data
记录,因此访问timeZone.name
不是一个好主意。您应该使用余烬.get()
,timeZone.get('name')
或Ember.get(timeZone, 'name')
。
接下来你的依赖关键是错误的。由于您使用每个name
的{{1}},因此应将依赖关键字timeZone
替换为timeZone
。
使用findBy
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
的组件中从控制器调用组件时。