我有一个输入字段的日期验证器:
export default Ember.Component.extend({
moment: Ember.inject.service(),
dateValidation: [{
message: 'invalid date',
validate: function(inputDate) {
if (!inputDate) {
return true; //allow empty date
}
return this.get('moment').moment(inputDate, 'YYYY-MM-DD', true).isValid();
}
}],
});
我使用ember-moment验证日期。通常我使用this.get('moment').moment(...)
但未定义函数this.get()
(get()
函数未定义,因为this
引用验证器函数,而不是ember组件,哪个有get()
功能)。
我知道this
指的是函数而不是我的组件,但我该如何解决呢?使用Ember.get()
并不适合我。
我正在使用ember-paper,而paper-input有一个customValidations属性,必须是一个数组(在我的情况下是dateValidation)
e.g:
{{paper-input
type="date"
value=atDate
onChange=(action (mut atDate))
customValidations=dateValidation}}
答案 0 :(得分:0)
第一个选项如评论中提到的@vothaison,您可以将this
引用传递给验证方法。
您可以在对象定义中注入moment
。
export default Ember.Component.extend({
moment: Ember.inject.service(),
dateValidation: [],
init() {
this._super(...arguments);
var objectValidation = {
message: 'invalid date',
myMoment: this.get('moment'),
validate: function(inputDate) {
if (!inputDate) {
return true; //allow empty date
}
return this.get('myMoment').moment(inputDate, 'YYYY-MM-DD', true).isValid();
}
};
this.get('dateValidation').pushObject(objectValidation);
}
});
答案 1 :(得分:0)
我无法对此进行测试,但是一个简单的bind
看起来应该可以解决问题:
export default Ember.Component.extend({
moment: Ember.inject.service(),
dateValidation: [{
message: 'invalid date',
validate: function(inputDate) {
if (!inputDate) {
return true; //allow empty date
}
return this.get('moment').moment(inputDate, 'YYYY-MM-DD', true).isValid();
}.bind(this)
}],
});