我一直在研究使用敲除验证来比较日期的不同方法。我无法在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 })
任何想法?
答案 0 :(得分:1)
那是因为您在对象文字创建中使用了this
(当您在fromDate
declration中引用toDate
时),并且在构建该对象时,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());