2015-11-03 55 views
0

如果我有一个用点符号定义的属性,我该如何在Ember中对其执行@get或@set?EmberJS:获取并设置用点符号定义的属性

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') 

问题是我不能做一个@get或@set上“validations.user.fullName”,因为它不知道如何访问该属性。但由于烬验证的方式,我必须这样定义属性,如果我想使用i18n,我必须这样设置。

我可以做@get('validations')['user.fullName'].presence.message得到的价值,如果我需要,但我真的需要设置它。

我确定必须有一种方法来在属性名称中使用点符号来设置它,但是我找不到任何说明如何的地方。

请帮忙吗?

回答

0

我从来没有能够做到这一点。我有opened an issue关于i18n支持的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; 
    } 
    } 
}