首页 > 解决方案 > 在 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"}      
    }

使用上面的代码,我得到一个错误;无法读取未定义的属性“常量”

是否可以实现上述命名?

标签: javascriptember.jsecmascript-6

解决方案


您可以使用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 对象。


推荐阅读