敲除验证 - 日期大于另一个日期
Knockout-Validation - Date greater than another date
我一直在研究使用敲除验证来比较日期的不同方法。我无法让它在 validatedObservable 对象中与我的 obervables 一起工作。
我需要 validatedObservable 来检查按钮单击时验证是否通过/失败 - 这是我的控件分组。
这是我的演示:
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/knockout-2.3.0.js"></script>
<script src="~/Scripts/knockout.validation.min.js"></script>
<script src="~/Scripts/moment.min.js"></script>
<form>
<table>
<tr>
<td>Name:</td>
<td><input type="text" data-bind="value:contactForm().name" value="" /></td>
</tr>
<tr>
<td>From:</td>
<td><input type="text" data-bind="value:contactForm().fromDate" value="" /></td>
</tr>
<tr>
<td>To:</td>
<td><input type="text" data-bind="value:contactForm().toDate" /></td>
</tr>
</table>
<button type="button" data-bind='click: submit'>Submit</button>
</form>
<script>
ko.validation.init({
messagesOnModified: false,
parseInputAttributes: true,
grouping: {
deep: true
}
});
var myViewModel = function () {
var self = this;
self.contactForm = ko.validatedObservable({
name :ko.observable().extend({ required: true }),
fromDate :ko.observable('2014-11-10').extend({ date: true }),
toDate: ko.observable('2014-11-10').extend({date: true, min: this.fromDate })
});
submit = function () {
console.log(this.contactForm.isValid())
};
};
ko.applyBindings(new myViewModel());
</script>
我基本上无法让这条线工作:
toDate: ko.observable('2014-11-10').extend({date: true, min: this.fromDate })
有人有什么想法吗?
那是因为您在对象文字创建中使用了 this
(当您在 toDate
声明中引用 fromDate
时),并且在构造该对象时,this
仍然指的是封装函数上下文(在这种情况下为 myViewModel
)。
试试这个(基于 this answer):
self.contactForm = ko.validatedObservable({
name: ko.observable().extend({ required: true }),
fromDate: ko.observable('2014-11-10').extend({ date: true }),
toDate: ko.observable('2014-11-10'),
init: function() {
this.toDate = this.toDate.extend({date: true, min: this.fromDate});
return this;
}
}.init());
我一直在研究使用敲除验证来比较日期的不同方法。我无法让它在 validatedObservable 对象中与我的 obervables 一起工作。
我需要 validatedObservable 来检查按钮单击时验证是否通过/失败 - 这是我的控件分组。
这是我的演示:
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/knockout-2.3.0.js"></script>
<script src="~/Scripts/knockout.validation.min.js"></script>
<script src="~/Scripts/moment.min.js"></script>
<form>
<table>
<tr>
<td>Name:</td>
<td><input type="text" data-bind="value:contactForm().name" value="" /></td>
</tr>
<tr>
<td>From:</td>
<td><input type="text" data-bind="value:contactForm().fromDate" value="" /></td>
</tr>
<tr>
<td>To:</td>
<td><input type="text" data-bind="value:contactForm().toDate" /></td>
</tr>
</table>
<button type="button" data-bind='click: submit'>Submit</button>
</form>
<script>
ko.validation.init({
messagesOnModified: false,
parseInputAttributes: true,
grouping: {
deep: true
}
});
var myViewModel = function () {
var self = this;
self.contactForm = ko.validatedObservable({
name :ko.observable().extend({ required: true }),
fromDate :ko.observable('2014-11-10').extend({ date: true }),
toDate: ko.observable('2014-11-10').extend({date: true, min: this.fromDate })
});
submit = function () {
console.log(this.contactForm.isValid())
};
};
ko.applyBindings(new myViewModel());
</script>
我基本上无法让这条线工作:
toDate: ko.observable('2014-11-10').extend({date: true, min: this.fromDate })
有人有什么想法吗?
那是因为您在对象文字创建中使用了 this
(当您在 toDate
声明中引用 fromDate
时),并且在构造该对象时,this
仍然指的是封装函数上下文(在这种情况下为 myViewModel
)。
试试这个(基于 this answer):
self.contactForm = ko.validatedObservable({
name: ko.observable().extend({ required: true }),
fromDate: ko.observable('2014-11-10').extend({ date: true }),
toDate: ko.observable('2014-11-10'),
init: function() {
this.toDate = this.toDate.extend({date: true, min: this.fromDate});
return this;
}
}.init());