Проверка KO и bootstrap-datetimepicker

Я пытаюсь проверить, что одно поле времени больше другого. Время вводится с помощью bootstrap-datetimepicker и проверяется с помощью проверки KO.

Моя проблема в том, что проверка, кажется, происходит до автозамены в текстовом поле.

Как я могу сделать проверку после применения автозамены?

Код:

var vm = function () {
    var self = this;
    self.startTime = ko.observable().extend({ required: true });
    self.endTime = ko.observable()
    .extend({
        validation: {
            validator: function (val) {
                if (self.startTime() === '' || val === '') {
                    return true;
                }
                return new Date(val) > new Date(self.startTime());
            },
            message: 'Event must finish after it started'
        }
    });
    (function () {
        $('#event-start-time').datetimepicker({
            pickDate: false
        });
        $('#event-end-time').datetimepicker({
            pickDate: false
        });
        $('#event-end-time').on("change.dp", function (e) {
            //I've tried with and without this
            //self.endTime.valueHasMutated();
        });
    })();
};

Результат:

введите здесь описание изображения

Скрипка


person Not loved    schedule 21.01.2014    source источник


Ответы (1)


может быть немного поздно, но это то, что я разработал:

Скажем, у вас есть дата окончания в качестве наблюдаемой, а затем используйте пользовательскую проверку dateBefore.

    this.endDate = ko.observable(new Date().addHours(3).toGMTString()).extend({
        required: true,
        dateBefore: self.startDate()
    });

Создание пользовательской проверки:

    ko.validation.rules['dateBefore'] = {
        validator: function (val, otherVal) {
            var d1 = new Date(val),
                d2 = new Date(otherVal);
            return d1 > d2;
        },
        message: 'The end date must be before the start date'
    };
    ko.validation.registerExtenders();

Комментарий, если вам нужны дополнительные пояснения

person Fred Johnson    schedule 03.03.2015