Knockout minLength с допустимой пустой строкой

Я новичок в нокауте и пытаюсь научиться использовать проверки. У нас есть следующий фрагмент кода -

    var MyObjectModel = function(myObject){
    var self = this;
    self.myNumber = ko.observable(myObject.number).trimmed();
    self.myNumber.extend({
        minLength: {
            params: 7,
            message: "My Number is too short."
        },
        maxLength: {
            params: 7,
            message: "My Number is too long."
        }
    });

    self.errors = ko.validation.group(self);
}

Теперь я хотел бы изменить код так, чтобы либо длина myObject.number была ровно 7, либо поле было пустым. Как мне сделать это изменение?

Любая помощь будет оценена по достоинству. Если вы считаете, что что-то не ясно, пожалуйста, дайте мне знать, чтобы я мог уточнить.


person Abhinav Manchanda    schedule 14.01.2013    source источник
comment
В чем проблема с вашим текущим подходом к minLength и minLength? Что именно не работает? Потому что кажется, что он работает нормально: jsfiddle.net/X9mDy/1 он действителен только для вас. введите 7 цифр.   -  person nemesv    schedule 14.01.2013
comment
minLength и maxLength отлично работают для меня. Я также хочу сделать поле необязательным. Поэтому, если пользователь ввел какое-либо значение, оно должно состоять ровно из 7 символов, иначе оно должно быть пустым. Я пробовал required:false, но это не помогает. Есть идеи, где я могу ошибаться?   -  person Abhinav Manchanda    schedule 14.01.2013


Ответы (1)


Вы можете использовать собственный шаблон для него:

var MyObjectModel = function(myObject){
    var self = this;
    self.myNumber = ko.observable(myObject.number).trimmed();
    self.myNumber.extend({
        pattern: {
            params: '^[0-9]{7}$|^$',
            message: "My Number must have 7 chars or stay empty."
        }
    });

    self.errors = ko.validation.group(self);
}
person Gabriel Gartz    schedule 14.01.2013
comment
Большое спасибо ! Мне действительно помогло - person Abhinav Manchanda; 14.01.2013