21

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

所以我在我的 js 代码中声明了以下 ko.observable 值:

 var numberValue = ko.observable().extend({ number: true }) 

这是我的观点部分:

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

当用户输入一些不是数字的值时,会显示错误消息:“请输入数字”。我可以显示不同的错误消息但仍使用本机规则吗?我不想为此编写自定义验证逻辑。对于一些工作示例的任何帮助将不胜感激。谢谢你!

4

3 回答 3

36

这是创建验证扩展程序的代码。

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

如您所见,所有扩展程序都可以接收参数对象或带有参数和自定义消息的对象文字。所以在你的情况下。

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

希望这可以帮助。

于 2012-05-11T15:18:45.123 回答
35

你可以像这样添加验证属性

 emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    }),
于 2013-09-07T20:23:53.500 回答
2

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

ko.observable().extend({
    unique: {
        params: {
            collection: foo,
            valueAccessor: function(item) {
                return item.bar();
            }
        },
        message: 'some custom message'
    }
}
于 2017-09-06T08:33:53.257 回答