淘汰赛验证 - 日期大于另一个日期

时间:2015-08-23 15:45:52

标签: knockout.js knockout-validation

我一直在研究使用敲除验证来比较日期的不同方法。我无法在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 })

任何想法?

1 个答案:

答案 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());
相关问题