3

取得したメタデータを使用してノックアウト(http://stackoverflow.com/questions/13662446/knockout-validation-using-breeze-utility)で検証ルールを作成する方法の例を改善し、エンティティに簡単に挿入するバリデーターを使用するようになりました:

function addValidationRules(entity) {
    var entityType = entity.entityType;
    console.log(entityType);
    if (entityType) {
        for (var i = 0; i < entityType.dataProperties.length; i++) {
            var property = entityType.dataProperties[i];
            var propertyName = property.name;
            var propertyObject = entity[propertyName];

            var validators = [];
            for (var u = 0; u < property.validators.length; u++) {
                var validator = property.validators[u];
                var nValidator = {
                    propertyName: propertyName,
                    validator: function (val, other) {
                        var error = this.innerValidator.validate(val, { displayName: this.propertyName });
                        this.message = error ? error.errorMessage : "";
                        return error === null;
                    },
                    message: "",
                    innerValidator: validator
                }
                validators.push(nValidator);
            }
            propertyObject.extend({
                validation: validators
            });
        }

        for (var i = 0; i < entityType.foreignKeyProperties.length; i++) {
            var property = entityType.foreignKeyProperties[i];
            var propertyName = property.name;
            var propertyObject = entity[propertyName];

            var validators = [];
            for (var u = 0; u < property.validators.length; u++) {
                var validator = property.validators[u];
                var nValidator = {
                    propertyName: propertyName,
                    validator: function (val, other) {
                        var error = this.innerValidator.validate(val, { displayName: this.propertyName });
                        this.message = error ? error.errorMessage : "";
                        return error === null;
                    },
                    message: "",
                    innerValidator: validator
                }
                validators.push(nValidator);
            }
            propertyObject.extend({
                validation: validators
            });
            if (!property.isNullable) {
                //Bussiness Rule: 0 is not allowed for required foreign keys
                propertyObject.extend({ notEqual: foreignKeyInvalidValue });
            }
        }
    }
};

私が今必要としているのは、エラーメッセージを自分の言語に翻訳することです。メッセージを翻訳するためのノックアウト検証に含まれているのと同様の、そよ風の機能を含めることができるかどうか疑問に思いました。

//quick function to override rule messages
ko.validation.localize = function (msgTranslations) {

    var msg, rule;

    //loop the properties in the object and assign the msg to the rule
    for (rule in msgTranslations) {
        if (ko.validation.rules.hasOwnProperty(rule)) {
            ko.validation.rules[rule].message = msgTranslations[rule];
        }
    }
};
//#endregion
4

1 に答える 1

3

これは良い考えです。Breeze User Voiceに追加して投票してください。私たちはこれらの提案を非常に真剣に受け止めています。

短期的には別のアプローチがあります。のいずれかを置き換えることができます。

Validator.messageTemplates

あなた自身のメッセージで。Validator.messageTemplatesは、値がパラメーター化されたバージョンのエラー メッセージであるバリデーターの名前をキーとする構成オブジェクトです。

これをより適切に文書化する必要があります。

于 2013-01-14T18:07:43.660 に答える