Плагин проверки KnockoutJS не показывает сообщение об ошибке


Я пытаюсь использовать плагин проверки KnockoutJs, и у меня возникает проблема. Перед публикацией данных из ввода я проверяю значение, если оно правильное, я публикую его и сбрасываю свою модель представления в состояние по умолчанию, если значение неверно, я заключаю ввод в красную рамку, добавляя некоторый класс css (или добавляя сообщение об ошибке ). Проблема в том, что это работает только один раз: после публикации данных я сбрасываю свою модель представления в состояние по умолчанию (как я уже говорил ранее), поле ввода становится пустым, и если я пытаюсь опубликовать эти пустые данные, проверка работает, но класс css не работает. не применяется (сообщение об ошибке не появляется). Пожалуйста, попробуйте мой пример скрипки, что не так?

* [Обновить].

Итак, я нашел обходной путь: просто добавьте дополнительный код в атрибут привязки данных

validationElement: itemToAdd().Name

должен быть

<input data-bind='value: itemToAdd().Name, validationElement: itemToAdd().Name' />

Работает, но выглядит плохо. В любом случае, будет хорошо, если кто-то сможет исправить мой предыдущий код.


person SamousPrime    schedule 13.08.2012    source источник


Ответы (2)


Просто измените

var t = ko.validation.group(viewModel.itemToAdd())

to

var t = ko.validation.group(viewModel.itemToAdd)
person Luffy    schedule 13.08.2012
comment
Но в этом случае значение в поле ввода не будет очищено после нажатия на кнопку. - person SamousPrime; 13.08.2012

Я собрал скрипку, иллюстрирующую мой ответ.

Один из способов приблизиться к этому состоит в том, чтобы ваш объект activeAccount имел свойство, которое я назвал своим errors, которое будет содержать все сообщения проверки для этого объекта.

var activeAccount = function(data) {
    this.Id = ko.observable(data.id);
    this.Name = ko.observable(data.name).extend({ required: { message: 'Enter account name.'} });
    this.UserId = ko.observable(1);
    this.errors = ko.validation.group(this);
};

var viewModel = {
    items: ko.observableArray([]), 
    itemToAdd: ko.observable(new activeAccount({})),
    createItem: function (item) {
        if (item.errors().length == 0) {
            viewModel.items.push(item);
            viewModel.itemToAdd(new activeAccount({}));
        } else {
            item.errors.showAllMessages();
        }
    }
};

После того, как вы сохранили элемент (будь то отправка на сервер, отправка в observableArray или и то, и другое), вы затем «сбрасываете» itemToAdd, устанавливая его в new activeAccount({}), передавая пустой объект конструктору.

person bflemi3    schedule 09.04.2013