2013-07-26 2 views
0

나는 간단한 breeze/knockout 기반 SPA를 보유하고 있습니다. 엔티티 목록에 대해 "단일 저장"옵션을 구현해야했습니다. 편집은 별도의 팝업이 아닌 목록에서 수행해야했습니다. 서버 저장에서버 측 변경 후 breeze 클라이언트 엔터티가 업데이트되지 않습니다.

은 ATTR 엔티티의 특정 attrs에 업데이트 된 것을 확인하고 또한 "마지막 업데이트 날짜"를 업데이트 할 것입니다.

하나의 엔티티 관리자가 엔티티 목록을 서버에서 가져 왔습니다.

은 하나가 임시 엔티티 관리자에 주요 엔티티 관리자에서 수출 및 수입 된 업데이트 및 개체를 저장할 준비 저장 가능합니다. 저장이 수행되고 (확인 인 경우) 개체가 다시 내보내지고 기본 엔터티 관리자로 다시 가져옵니다. 새로운 "마지막 업데이트 날짜"값이 다시 MainEntityManager 프로세스 재 내보내기/가져 오기에 저장 한 후 복사되지 않습니다처럼

function saveSingle(entity) 
{ 
    var tempMgr = MainEntityManager.createEmptyCopy(); 
    var exp = MainEntityManager.exportEntities([entity]); 
    tempMgr.importEntities(exp, { 
     mergeStrategy: breeze.MergeStrategy.PreserveChanges }); 
    tempMgr.saveChanges() 
    .then(function (saveResult) { 
     var reImp = tempMgr.exportEntities(); 
     MainEntityManager.importEntities(reImp); 

     entity.Last_Updated_Date(saveResult.entities[0].Last_Updated_Date()); 
     entity.entityAspect.entityState = breeze.EntityState.Unchanged; 

     logger.success("changes saved"); 
    }) 
    .fail(function() { 
     logger.error("Single Save failed: " + error.message); 
    }); 
} 

그러나, 그것은 보인다. 나는이 문제를 해결해 봤지만이 구현에서 잘못된 점을 알았고 "단일 엔티티 저장"기능을 구성하는 더 좋은 방법이 있는지 궁금해합니다.

의견 및 질문 환영합니다!

답변

0

아직 여러 EntityManagers가있는 Breeze 응용 프로그램을 만들지는 않았지만 주제에 대한 문서를 읽었습니다 (사용자가 가지고있는 것처럼 보이지만 그렇지 않은 경우에는 : http://www.breezejs.com/documentation/multiple-managers).

그러나 코드를 보면 필자는 그들이 문서에서 설명하는 것을 수행하고 있다고 생각하지 않습니다. 아마 그것은 의도적 인 것이지만 나는 그것을 지적 할 것이라고 생각했다. 사용자가 "sandbox"EntityManager에서 해결 된 엔티티에 대해 로컬 편집을 수행 한 다음 변경 사항을 마스터 EntityManager에 다시 복제하는 식으로 가져 오는 것이 좋습니다. 당신이 그것을 저장할 때

어쨌든, 나는 브리즈 항상 서버에서 개체의 복사본을 다시 전송 생각하지 않습니다.
다음은 EntityManager의 source에서 코멘트입니다 :

// 우리가 실제로 병합을 수행하지 않도록 visitAndMerge 작업이 최적화 된 것을 참고 경우 // 실제 엔티티를 반환하지 않은 작업을 저장 - 즉, OData 및 Mongo 업데이트 및 삭제 중에. 다시 응답 들어오는 정확히 볼 수 있도록

(이것은 모든 웹 개발을위한 매우 중요한 도구이다), 서버는 서버에서 개체의 복사본을 다시 전송 여부를 확인 Fiddler를 실행합니다. Fiddler는 요청할 경우 JSON 응답을 예쁘게 인쇄합니다. :-)

관련 문제