В настоящее время я использую JQuery Validation и Qtip вместе, чтобы иметь дело с фактической проверкой и отображением информации на экране с помощью приятных уведомлений в стиле всплывающей подсказки при ошибках проверки с использованием компонента errorPlacement параметров проверки.
В настоящее время каждая модель представления имеет свой собственный метод для настройки и запуска проверки и обратных вызовов, однако я пытался найти более приятный способ сделать это, будь то добавление настраиваемой привязки для настройки моих правил проверки через данные -bindings или альтернативным способом, но по-прежнему дает те же результаты (т.е. errorPlacement запускается, когда возникает ошибка проверки, и сообщает Qtip, что нужно отобразить ошибку для данного элемента).
Перед тем, как я начал делать один сам, я просто проверил в Интернете и обнаружил Knockout Validation , который, как я сначала думал, был отличной идеей, я мог применить свою логику проверки непосредственно к данным в моей viewModel, а затем просто найдите какой-то обратный вызов, чтобы заставить Qtip включиться, однако, похоже, нет обратного вызова, который я могу найти задокументированным. Кажется, что библиотека делает все, что я хочу, для проверки, а не для отображения. Я просмотрел исходный код и примеры, но не увидел ничего, кроме ko.validation.group (viewModel), которая дала бы мне наблюдаемое, содержащее ошибки, но я не уверен, смогу ли я использовать это так же, как я ожидал.
Вот пример того, как происходит моя текущая проверка:
/*globals $ ko */
function SomeViewModel() {
this.SetupValidation = function () {
var formValidationOptions = {
submitHandler: self.DoSomethingWhenValid,
success: $.noop,
errorPlacement: function (error, element) {
if (!error.is(':empty'))
{ qtip.DoSomethingToDisplayValidationErrorForElement(element, error); }
else
{ qtip.DoSomethingToHideValidationErrorForElement(element); }
}
};
$(someForm).validate(formValidationOptions);
this.SetupValidationRules();
};
this.SetupValidationRules = function() {
$(someFormElement1).rules("add", { required: true, minlength: 6, maxlength: 20, alphaNumeric: true });
$(someFormElement2).rules("add", { required: true, minlength: 6, maxlength: 20 });
$(someFormElement3).rules("add", { required: true, email: true, });
};
}
В настоящее время я уверен, что могу устранить необходимость в методе правил проверки, добавив настраиваемую привязку, чтобы я мог установить проверку в привязке данных, однако, если возможно, я хотел бы использовать такой же подход обратного вызова с существующей привязкой Knockout-Validation.