Установите собственное сообщение об ошибке, используя собственные правила плагина проверки нокаута

Я использую Asp.net MVC3 и библиотеку knockoutjs. Мне нужно сделать некоторые проверки на стороне клиента. Я изучаю плагин проверки нокаута.

Поэтому я объявляю следующее значение ko.observable в моем коде js:

<code> var numberValue = ko.observable().extend({ number: true }) 
</code>

Это моя часть зрения:

<code><input data-bind = "value: numberValue " />
</code>

Когда пользователь вводит какое-либо значение, которое не является числом, отображается сообщение об ошибке: "Пожалуйста, введите число". Могу ли я отобразить другое сообщение об ошибке, но все еще используя собственные правила? Я не хочу писать собственную логику проверки только для этого. Любая помощь с некоторым рабочим примером будет принята с благодарностью. Благодарю вас!

Ответы на вопрос(3)

Решение Вопроса

Вот код, который создает расширители проверки.

addExtender: function (ruleName) {
    ko.extenders[ruleName] = function (observable, params) {
        //params can come in a few flavors
        // 1. Just the params to be passed to the validator
        // 2. An object containing the Message to be used and the Params to pass to the validator
        //
        // Example:
        // var test = ko.observable(3).extend({
        //      max: {
        //          message: 'This special field has a Max of {0}',
        //          params: 2
        //      }
        //  )};
        //
        if (params.message) { //if it has a message object, then its an object literal to use
            return ko.validation.addRule(observable, {
                rule: ruleName,
                message: params.message,
                params: params.params || true
            });
        } else {
            return ko.validation.addRule(observable, {
                rule: ruleName,
                params: params
            });
        }
    };
},

Как вы видите, все расширители могут получить объект params или литерал объекта с параметрами и специальное сообщение. Так и в вашем случае.

var numberValue = ko.observable().extend({ number: { 
    message: "some custom message", 
    params: true 
} }) 

Надеюсь это поможет

 Mdb11 мая 2012 г., 17:55
Просто то, что мне было нужно. Спасибо Большое
 Ian Grainger03 дек. 2013 г., 12:18
Так, подожди - можно установить ko.validation.rules.pattern.message, но не другие !? Я только что попробовал с validation.rules.minLength, и это не сработало - я вижу значение, устанавливаемое для объекта, но тогда оно просто использует исходное значени
 ariestav05 июн. 2013 г., 22:04
Просто и идеально!
 Simon_Weaver07 мая 2014 г., 02:15
как показано выше, вы также можете использовать{0} в качестве заполнителя для параметра: например.this.foo = ko.observable('').extend({ max: { params: 5, message: "The maximum value is {0}!" } });

Вы можете просто добавить свойство валидации, как это

 emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    }),
 cesAR20 мар. 2017 г., 17:49
Я поддерживаю ваше предложение официальной информацией: Github.com / Knockout-Contrib / Knockout-Validation / вики / ... В первом абзаце вы можете прочитать «var myObj = ko.observable (). Extend ({обязательный: {params: true, сообщение: 'Это поле обязательно для заполнения.'}});"
 mikus28 окт. 2014 г., 15:17
yeap, работает хорошо, и это гораздо лучший ответ, чем приведенный выше. Используйте предоставленные решения как можно дольш

если вы хотите изменить сообщение для валидатора, который уже принимает другие параметры, вы должны обернуть эти существующие параметры в новый объект с именемparams.

ko.observable().extend({
    unique: {
        params: {
            collection: foo,
            valueAccessor: function(item) {
                return item.bar();
            }
        },
        message: 'some custom message'
    }
}

Ваш ответ на вопрос