取得したメタデータを使用してノックアウト(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