Ember CLI+Ember 2.1
我有一个子组件,它在跟踪"必需"对象的父组件上观察键/值哈希。
requiredObjects: {
object1_id: true,
object2_id: false,
...
}
这些对象是从Ember数据中检索到的记录。是否需要对象是一个仅与组件相关的瞬态属性,这就是为什么我不在对象本身上使用"required"属性的原因。
有几个子组件使用不同的数据可视化显示这些对象中的一个或多个,每个子组件都有另一个子组件,该子组件具有用于要求该对象的控件。
控件本身将操作发送到父控制器,并从父控制器接收requiredList。我想做的是。。。
isRequired: Ember.computed('player', `requiredList.${this.get('player.id')}`, {
get(key) {
return this.get(`requiredList.${this.get('player.id')}`);
},
set(key, value) {
this.set(`requiredList.${this.get('player.id')}`, value);
return value;
}
}),
然而,这并不奏效。本质上,我需要观察requiredList中与player.id匹配的键何时更新,但在初始化组件并设置"player"之前,我不知道id。有办法做到这一点吗?
我曾想过使用数组而不是键/值哈希,但这需要每次成员身份更改时,每个控件都在数组上循环,并查看其播放器是否在requiredList中。考虑到列表中通常有几百个玩家,每个玩家目前在页面的不同部分都有2到3个控件,这似乎效率很低。
更新
因此,将它移到init()中可以解决问题,尽管我不知道为什么。
init() {
this._super(...arguments);
this.set('isRequired', Ember.computed('player', `requiredList.${this.get('player.id')}`, {
get(key) {
return this.get(`requiredList.${this.get('player.id')}`);
},
set(key, value) {
this.set(`requiredList.${this.get('player.id')}`, value);
return value;
}
}));
},
模板化字符串使用当前上下文进行计算。
在第一种情况下,上下文实际上是模块本身,根据规范,它是undefined
,因此requiredList.${this.get('player.id')}
=>requiredList.undefined
。
在第二种情况下,您在init()
函数内部,因此this
是对象。