2013-01-14 4 views
3

얻은 메타 데이터를 사용하여 knockout (http://stackoverflow.com/questions/13662446/knockout-validation-using-breeze-utility)에서 유효성 검사 규칙을 만드는 방법에 대한 예제를 개선했습니다. 엔티티로 그 바람 삽입 유효성 검사기 :번역 breeze 유효성 확인 메시지

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

내가 지금 필요한 것은 나의 언어로 오류 메시지를 번역하고는 knockout-에 포함 된 유사 산들 바람하는 기능을 포함 할 수있을 것인지 궁금 해서요 메시지 번역 확인 :

//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 

답변

3

이것은 좋은 생각입니다. Breeze User Voice에 추가하십시오 (그리고 투표하십시오). 우리는 이러한 제안을 매우 중요하게 생각합니다.

단기간에 또 다른 접근법이 있습니다.

Validator.messageTemplates 

중 하나를 나에게 직접 보낼 수 있습니다. Validator.messageTemplates은 값이 매개 변수화 된 버전의 오류 메시지 인 유효성 검사기의 이름으로 구성되는 구성 객체입니다.

더 잘 문서화해야합니다.

+0

제안 사항이 추가되었습니다. http://breezejs.uservoice.com/forums/173093-breeze-feature-suggestions/suggestions/3550098-create-function-to-translate-error-messages –

+0

이 구성 객체를 보았습니다. , 그러나 바람이 산산조각 난 속도로 매번 그 선을 대체해야하는 것은 지루해 보였다. –

+0

소스를 만질 필요가 없습니다. breeze가로드 된 후 소스를 직접 업데이트 할 수 있습니다. –

관련 문제