Knockout.js 使用淘汰验证插件的本机规则设置自定义错误消息

Knockout.js 使用淘汰验证插件的本机规则设置自定义错误消息,knockout.js,customization,knockout-validation,Knockout.js,Customization,Knockout Validation,我正在使用Asp.NETMVC3和knockoutjs库。我需要做一些客户端验证。我正在探索淘汰验证插件 因此,我在js代码中声明以下ko.observable值: var numberValue = ko.observable().extend({ number: true }) 这是我的观点部分: <input data-bind = "value: numberValue " /> 当用户输入的值不是数字时,将显示一条错误消息:“请输入一个数字”。我是否可以显示不同

我正在使用Asp.NETMVC3和knockoutjs库。我需要做一些客户端验证。我正在探索淘汰验证插件

因此,我在js代码中声明以下ko.observable值:

 var numberValue = ko.observable().extend({ number: true }) 
这是我的观点部分:

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


当用户输入的值不是数字时,将显示一条错误消息:“请输入一个数字”。我是否可以显示不同的错误消息,但仍使用本机规则?我不想仅仅为此编写自定义验证逻辑。如果您能提供一些有用的例子,我们将不胜感激。谢谢大家!

以下是创建验证扩展程序的代码

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 
} }) 

希望这有帮助。

您可以像这样添加validate属性

 emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    }),

现有的答案是正确的。但是,如果要更改已接受其他参数的验证器的消息,则必须将这些现有参数包装到名为
params
的新对象中

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

正是我需要的。非常感谢你!所以,等等-可以设置ko.validation.rules.pattern.message,但不能设置其他消息!?我只是尝试了validation.rules.minLength,但它不起作用-我可以看到在对象上设置的值,但它只是使用原始值。如上所示,您还可以使用
{0}
作为参数的占位符:例如
this.foo=ko.observatable(“”).extend({max:{params:5,消息:“最大值为{0}!”})是的,效果很好,它比上面的答案要好得多。尽可能使用提供的解决方案我通过提供官方信息来支持您的建议:在第一段中,您可以阅读“var myObj=ko.observable().extend({required:{params:true,message:'此字段是必需的。}});”