Почему мое строковое значение проходит проверку нокаута, а целочисленное значение — нет?

Использование Knockout 2.2.1 с последней версией Knockout-validation.js.

См. следующий jsfiddle для рабочего примера моей проблемы:

http://jsfiddle.net/tbstudee/keRPY/4/

Как вы можете видеть, при загрузке с существующими данными целочисленное значение не проходит проверку, но строковое значение проходит. Это происходит только тогда, когда viewModel инициализируется с существующими данными.

Я знаю, что проблема в моем флаге isValid, поскольку его комментирование устраняет ошибку проверки при загрузке.

self.isValid = ko.computed(function () {
    return ko.validation.group(
        self,
        {
            observable: true,
            deep: true
        }).showAllMessages(true);
}, self);

Что я могу сделать, чтобы обойти это, кроме как заполнить мою модель представления строками вместо целых чисел?


person Tom Studee    schedule 27.03.2013    source источник


Ответы (1)


maxLength и minLength предназначены для строк, для чисел вам нужно использовать min и max, в противном случае проверка завершается преобразованием значения в строку. Взгляните на эту скрипку

self.myInt = ko.observable(data.myInt).extend({
        required: true,
        number: true,
        min: 100000,
        max: 999999
    });
person Kyeotic    schedule 27.03.2013
comment
На самом деле это также отменяло другую проблему, поскольку у вас было number: true в строковом значении, но оно было действительным из-за проверки maxLength. - person Kyeotic; 27.03.2013