javascript - 在 Ember 类中使用变量来命名数组键
问题描述
我有一个 Ember 组件类,如下所示;
import Ember from 'ember';
import myappconstants from '../utils/constants';
export default Ember.Component.extend({
constants: myappconstants.FIELD_CONSTANTS.SECTION_1,
myConfigs: {
[myappconstants.FIELD_CONSTANTS.SECTION_1.FIELD_1] : {fieldName:"my__label__1", type:"text"},
[myappconstants.FIELD_CONSTANTS.SECTION_1.FIELD_2] : {fieldName:"my__label__2", type:"text"}
}
})
我的问题是在我的组件类中,我希望以稍微不同的方式定义“myConfigs”键。这是因为定义可以增长到多达 20 个项目,并且将来任何名称更改都必须在多个地方完成。
所以我希望它被定义为
myConfigs: {
[this.constants.FIELD_1] : {fieldName:"my__label__1", type:"text"},
[this.constants.FIELD_2] : {fieldName:"my__label__2", type:"text"}
}
使用上面的代码,我得到一个错误;无法读取未定义的属性“常量”
是否可以实现上述命名?
解决方案
您可以使用willRender
您将获得的组件类的钩子,并使用.set()
设置您的myConfigs
属性。
它看起来像这样:
import Ember from 'ember';
import myappconstants from '../utils/constants';
export default Ember.Component.extend({
willRender() {
const sec1Constants = myappconstants.FIELD_CONSTANTS.SECTION_1;
this.set('myConfigs', {
`${sec1Constants.FIELD_1}`: {fieldName:"my__label__1", type:"text"},
`${sec1Constants.FIELD_2}`: {fieldName:"my__label__2", type:"text"}
});
}
});
注意:如果您选择执行任何类型的.set()
on myConfigs
,您将希望使用 Ember 对象而不是 POJO 作为 set 对象。