2013-04-28 2 views
4

의 속성 변경시 새로 생성 된 엔터티의 유효성을 검사 할 수 있습니까 : "Breeze는 캐시에서 엔터티의 유효성을 자동으로 검사하지만 분리 된 엔터티에서는 유효하지 않습니다. Breeze는 캐시에 추가 할 때까지 고객의 유효성을 검사하지 않으므로 캐시에 들어가기 전에 새 엔터티의 값을 설정하고 유효성 검사를 트리거 할 수 있습니다. "breezejs는 breezejs 설명서에서 SAVE

내 질문은 위의 맥락에서 : 새 개체가 생성 되려고하고 저장 버튼을 누를 때 항상 확인을 보여 breezejs 및 검증에 대한 웹에 떠

샘플.

breezejs는 한 입력 필드의 탭에서 100 개의 문자 (10 개 허용)를 입력하고 탭을 다음 입력 필드로 입력 할 때 속성 변경의 유효성을 검사 할 수 있습니까? 사용자가 Save changes 버튼을 누를 때가 아니라 각 속성 변경시에 유효성 검사 오류 메시지를 표시하기 만하면됩니다.

또는 캐시에 아직 추가되지 않았기 때문에 새로 만든 엔티티에서 작동하지 않습니까? 그것은 편집 된 entites에 대해서만 작동합니까?

답변

4

엔티티는 기본적으로 캐시에 추가됩니다. 엔티티를 만들 때 명시 적으로 entityStateDetached 또는 원하는 경우 다른 상태로 설정할 수 있습니다. (entityManager.createEntity('entityType', null, breeze.EntityState.Detached))

유효성 검사는 언제든지 어떤 상태의 엔티티도 수동으로 유효성을 검사 할 수 있습니다. 속성이 변경 될 때 유효성 검사를 확인하려면 entityAspect.propertyChanged 이벤트에 가입하기 만하면됩니다. propertyChanged 이벤트를 사용하면 엔티티 자체, 변경된 속성의 이름, 이전 값 및 새 값에 액세스 할 수 있습니다. 그런 다음 entity.entityAspect.validateProperty(propertyname)을 사용하여 속성 유효성 검사를 확인하고 결과를 처리하기 만하면됩니다.

속성 변경에 가입하고 자세한 도움말을 수동으로
(아래 코드는 바람의 예에서 결합됩니다)

// assume order is an order entity attached to an EntityManager. 
order.entityAspect.propertyChanged.subscribe(
function (propertyChangedArgs) { 
    // this code will be executed anytime a property value changes on the 'order' entity. 
    var entity = propertyChangedArgs.entity; // Note: entity === order 
    var propertyNameChanged = propertyChangedArgs.propertyName; 
    var oldValue = propertyChangedArgs.oldValue; 
    var newValue = propertyChangedArgs.newValue; 

    if (!entity.entityAspect.validateProperty(propertyNameChanged)){ 
     //Property is not valid. Inform the user if needed. 
    } 

}); 

를 확인하고 예는 다음 링크의 참조 :
Subscribing to the propertyChanged event
Manually validating a property
Creating a new entity

+0

고객 생성 공식이있는 경우이 모든 속성 유효성 검사/등록자가 작동합니까? 내 말은 고객 엔티티가 아직 존재하지 않는다는 것입니다. 그래서 어떻게하면 propertyChanged.subscribe를 할 수 있습니까? – Elisabeth

+0

entityManager에서 createEntity 함수를 호출하자마자 subscribe 및 검증 할 수있는 완전한 엔티티가 있습니다. 모든 것은 entityState에 관계없이 또는 기본 데이터베이스에 저장되었는지 여부에 관계없이 "엔터티"입니다. 사용자에게 레코드/엔티티를 생성하기위한 폼을 제공 할 때'createEntity'를 호출하면 리턴 된 엔티티를 뷰 모델에 바인드합니다. – adamlj

1

수동 검증이 가능하다고 생각합니다. 나는이 당신을 도움이되기를 바랍니다 http://www.breezejs.com/documentation/validation

:

if (!newCustomer.entityAspect.validateEntity()) {/* do something about errors */} 
You can also validate a specific property: 

if (!newCustomer.entityAspect.validateProperty("CompanyName")) { 
     /* do something about errors */} 

나는에서이 예제를 얻을 수 있습니다.

+0

예 엔티티가 부착되어 있는지 여부를 알려줍니다. 내가 breezejs 수동 검증을 위해 google 할 때 나는 아무 쓸모가 없다. 설명서에 유용한 샘플이 부족한 것 같습니다. – Elisabeth