【发布时间】:2016-06-12 17:48:36
【问题描述】:
我有两个来自数据库的日期/时间,但是这些在视图上被分成四个(两个日期和两个时间),日期和时间都是自定义元素。见下文。
我的问题是我的开始日期/时间不能大于我的结束日期/时间。我知道如何在 c# 中做到这一点:
- 检查日期字符串是否包含默认时间 00:00:00,如果是则删除。
- 在新的日期时间中解析日期/时间字符串
- 重复第二个日期/时间
- 验证是否从 return from < to)
但是如果不进行 API 调用,我不知道如何在 Aurelia 中执行此操作。我已经注意到isLessThan,但是我需要先将我的字符串解析为日期时间才能做到这一点。
bind(){
return this.dataContext.getContent(this.id)
.then(baseContent => {
this.baseContent = baseContent;
this.validator = this.validation.on(this)
.ensure('baseContent.ValidFromDate').isNotEmpty()
.ensure('baseContent.ValidFromTime').isNotEmpty()
.ensure('baseContent.ValidToDate').isNotEmpty()
.ensure('baseContent.ValidToTime').isNotEmpty()
.ensure('baseContent.ValidFromDate / baseContent.ValidFromTime').isLessThan('baseContent.ValidToDate / baseContent.ValidToTime')
;
}); }
我知道上面的方法行不通,我是 Aurelia 的新手,但我仍然能适应它。
更新
我尝试了以下方法,但收到了一个:
未处理的承诺拒绝类型错误:path.split 不是函数
我认为问题在于它不知道将错误消息分配给什么,但我可能是错的。
.ensure(this.datetimeformat.format(baseContent.ValidFromDate, baseContent.ValidFromTime)).isLessThan(this.datetimeformat.format(baseContent.ValidToDate, baseContent.ValidFromTime));
import moment from 'moment';
export class DateTimeFormat {
format(date, time) {
if (date.indexOf("T") > -1) {
date = date.split('T')[0];
}
return moment(date + 'T' + time, 'DD/MM/YYYY HH:mm:ss');
}
}
我注意到其中一个答案使用了 computedFrom,但是因为我需要先将它们更改为 DateTime,然后解析回来我不知道我应该在哪里提供。
更新
.ensure('baseContent.ValidFromDate', (config) => { config.computedFrom(['baseContent.ValidFromDate', 'baseContent.ValidFromTime', 'baseContent.ValidToDate', 'baseContent.ValidToTime']) }).isNotEmpty().passes(() => {
return this.datetimeformat.format(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime) < this.datetimeformat.format(this.baseContent.ValidToDate, this.baseContent.ValidToTime);
})
我想我越来越近了,但还是不行:-(
我也试过了
.ensure('baseContent.ValidFromDate', (config) => { config.computedFrom(['baseContent.ValidFromDate', 'baseContent.ValidFromTime', 'baseContent.ValidToDate', 'baseContent.ValidToTime']) }).if(() => {
return this.baseContent.ValidFromDate !== null && this.baseContent.ValidFromTime !== null && this.baseContent.ValidToDate !== null && this.baseContent.ValidToTime !== null})
.passes( () => {return this.datetimeformat.format(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime) < this.datetimeformat.format(this.baseContent.ValidToDate, this.baseContent.ValidToTime)})
.endIf().isNotEmpty()
开发者工具没有错误。
function validateFromDateTimeIsBeforeToDateTime(dateFrom, timeFrom, dateTo, timeTo) {
debugger;
if (dateFrom !== null && dateFrom !== undefined &&
timeFrom !== null && timeFrom !== undefined &&
dateTo !== null && dateTo !== undefined &&
timeTo !== null && timeTo !== undefined) {
return this.datetimeformat.format(dateFrom, timeFrom) < this.datetimeformat.format(dateTo, timeTo);
}
else {
return true;
}
}
.ensure('baseContent.ValidFromDate').isNotEmpty().passes(validateFromDateTimeIsBeforeToDateTime(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime, this.baseContent.ValidFromDate, this.baseContent.ValidFromTime))
.ensure('baseContent.ValidFromTime').isNotEmpty()
.ensure('baseContent.ValidToDate').isNotEmpty().passes(validateFromDateTimeIsBeforeToDateTime(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime, this.baseContent.ValidFromDate, this.baseContent.ValidFromTime))
.ensure('baseContent.ValidToTime').isNotEmpty()
然而,这会引发“未处理的承诺拒绝类型错误:无法获取未定义或空引用的属性 'datetimeformat'”
【问题讨论】:
标签: validation datetime aurelia custom-element