EmberJS:获取并设置用点表示法

时间:2015-11-03 04:19:43

标签: ember.js

如果我有一个用点符号定义的属性,我如何在Ember中对它进行@get或@set?

model = DS.Model.extend EmberValidations.Mixin,
  ...

  validations:
    'user.fullName':
      presence:
        message: null

  initializer: (->
    @set 'validations.user.fullName.presence.message', @get('i18n').t('validations.fullName.format') # this doesn't work
  ).on('init')

问题是我无法在' validations.user.fullName'上执行@get或@set。因为它不知道如何访问该属性。但是由于ember-validations的工作方式,我必须以这种方式定义属性,如果我想使用i18n,我必须设置它。

如果需要,我可以@get('validations')['user.fullName'].presence.message获取值,但实际上我需要设置它。

我确定必须有一种方法可以在属性名称中使用点表示法来设置它,但我无法在任何地方找到任何说法。

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

我从来没能做到这一点。关于i18n支持,我有opened an issue关于ember-model-validator的问题。但我已经能够使用以下代码解决问题(使用custom validation):

translate(label) {
  return this.get('i18n').t(label).toString();
},

validations: {
 code: {
  'user.fullName': {
    validation(key, value) {
      return !Ember.isEmpty(value);
    }, message(key, value) {
      let translation = value.translate('path.to.required.message.translation');
      return translation;
    }
  }
}