Подтверждение нокаута - PullRequest
       21

Подтверждение нокаута

45 голосов
/ 25 января 2012

У меня есть проект asp.net mvc3, в котором я выполняю массовое редактирование таблицы с привязкой выбивки. Я хочу сделать проверки, такие как требуемые и проверки номера при сохранении данных. Есть ли более простой способ сделать нокаут проверки? PS: я не использую формы.

Ответы [ 3 ]

83 голосов
/ 05 марта 2012

Взгляните на Knockout-Validation , которая корректно настраивает и использует то, что описано в документации нокаута .Под: Live Пример 1: Принудительный ввод цифр

Вы можете увидеть его вживую в Fiddle

UPDATE : скрипта обновлена ​​доиспользуйте последние версии KO 2.0.3 и ko.validation 1.0.2 с помощью URL CDN cloudfare

Для настройки ko.validation:

ko.validation.rules.pattern.message = 'Invalid.';

ko.validation.configure({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
});

Для настройки правил проверки используйте расширители.Например:

var viewModel = {
    firstName: ko.observable().extend({ minLength: 2, maxLength: 10 }),
    lastName: ko.observable().extend({ required: true }),
    emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    })
};
5 голосов
/ 12 мая 2015

Если вы не хотите использовать библиотеку KnockoutValidation, вы можете написать свою собственную.Вот пример для поля Обязательное.

Добавьте класс javascript со всеми вашими расширениями KO или расширителями и добавьте следующее:

ko.extenders.required = function (target, overrideMessage) {
    //add some sub-observables to our observable
    target.hasError = ko.observable();
    target.validationMessage = ko.observable();

    //define a function to do validation
    function validate(newValue) {
    target.hasError(newValue ? false : true);
    target.validationMessage(newValue ? "" : overrideMessage || "This field is required");
    }

    //initial validation
    validate(target());

    //validate whenever the value changes
    target.subscribe(validate);

    //return the original observable
    return target;
};

Затем в вашем viewModel вы расширяете вас на:

self.dateOfPayment: ko.observable().extend({ required: "" }),

Существует несколько примеров такого стиля проверки в Интернете.

0 голосов
/ 30 августа 2013

Проверка Knockout.js удобна, но не надежна. Вы всегда должны создавать реплику проверки на стороне сервера. В вашем случае (когда вы используете knockout.js) вы отправляете данные JSON на сервер и обратно асинхронно, поэтому вы можете заставить пользователя думать, что он видит проверку на стороне клиента, но на самом деле это будет асинхронная проверка на стороне сервера.

Взгляните на пример здесь upida.cloudapp.net: 8080 / org.upida.example.knockout / order / create? ClientId = 1 Это ссылка «Создать заказ». Попробуйте нажать «Сохранить» и поиграть с продуктами. Этот пример сделан с использованием библиотеки upida (есть версия Spring mvc и asp.net mvc этой библиотеки) из codeplex.

...