2011-09-01 6 views
3

현재 나는 no-SQL을 기반으로하는 응용 프로그램을 개발하고 있습니다 (raven db 사용). 이 응용 프로그램의 핵심은 많은 노드, 하위 노드 등이있는 트리 같은 데이터 구조입니다.녹아웃 js와 레이븐 DB

현재 각 노드 또는 하위 노드는 C# 개체로 나타냅니다. 상위 - 하위 관계는 상위 노드의 하위 노드 모음 인 전진 전용 관계로 만들어집니다.

모든 것은 각 데이터 유형에 대해 적절한 GET 및 POST를 사용하여 Mvc 응용 프로그램의 임시 양식에 의해 처리됩니다. 전체 그래프는 Raven DB에 JSON으로 저장됩니다.

목표는 knockoutjs를 사용하여 UI 부분을 수정하는 것입니다. KO는 json 데이터 구조와도 잘 작동하기 때문에 ravendb json 구조를 "녹아웃 (knockout) 호환"으로 만드는 방법이 있는지 궁금합니다. KO 고유 구조를 만들 필요없이 직접 사용할 수 있습니다 (관측 가능 등 구현) 그 다음이 둘 사이의 매핑을 만듭니다.

객체 그래프의 샘플 :

물건이 UI에 업데이트되는 후
public class NodeA 
{ 
public string Name {get;set;} 
public List<SubNode> Childs {get;set;} 
} 

public class SubNode 
{ 
public string Name {get;set;} 
public bool SomeBool {get;set;} 
} 

public class NodeB 
{ 
public string Name {get;set;} 
public int SomeInt {get;set;} 
} 

public class GraphToStore 
{ 
public List<NodeA> NodeAList {get;set;} 
public List<NodeB> NodeBList {get;set;} 
} 

읽기/쓰기 부분은 여전히 ​​아약스 호출로, 서버 측 처리 할 것입니다. 유효성 검사는 서버 쪽에서 수행되며 ajax 호출을 통해 클라이언트에 반환됩니다. 내 문제는 내가 ravendb json을 knockoutjs와 함께 사용한다고 말한 것입니다. 그렇지 않으면 모든 것을 재구성하고 매핑해야하며 그래프는 거대합니다 (50+ 클래스).

+0

나는 Raven DB에 대해 아무런 경험이 없다.하지만 JSON이 생성 된 JSON이 NewtonSoft.Json.JsonConvert.SerializeObject (Object)의 리턴과 비슷하게 보이면 아무 문제가 없을 것이다. –

답변

4

Knockout-mapping-plugin을 살펴보십시오. 한 번의 호출로 녹아웃 호환 뷰 모델을 "자동으로"생성합니다. 당신이 매핑에 대한 호출 후이 작업, 중단 점을 가지고 데이터 구조를 탐색 한 후

당신은

var viewModel.myRavenDbData = ko.mapping.fromJSON(json data variable); 
var unwrappedData = viewModel.myRavenDbData(); // need only if viewModel.myRavenDbData is an observable 

같은 일을 할 것입니다. 일반적으로 실제 값은 ko.observables로 데이터 구조와 유사합니다. 탐색에 필요한 모든 노드는 정상적인 자바 스크립트 객체입니다.

0

예. Knockouts Mapping 기능을 사용하고 모델 개체에서 직접 ViewModels을 만들 수 있습니다. 하지만, 두 점이 있습니다 :

1) 객체가 RavenDB에 저장되었다는 사실이 metter가 아니라고 생각합니다. MVC 응용 프로그램은 RavenDB에서 객체를 검색하므로 JSON에서 직렬화 해제되며 REST 인터페이스를 통해 JS 페이지에 제공되므로 JSON으로 다시 직렬화됩니다. 따라서 RavenDB의 JSON 구조체로 직접 작업하지는 않는다. JSON에 직렬화 된 표준 CLR 객체이다.

Raven에서 직접 작업하려면, 애플리케이션을 직접 raven의 인터페이스에 연결해야합니다. 이는 좋은 생각이 아닙니다.하지만 성능면에서는 뛰어납니다.

2) 모델 객체를 ViewModels로 사용하는 것이 좋다고 생각하지 않습니다. 단, 녹아웃 매핑 플러그인을 사용해야합니다.

곧 뷰 모델에 논리를 추가해야합니다. 계산 값을보기에 표시하거나 일부 동작 논리를 추가합니다 (저장/편집 ... 등).

첫 번째 경우 서버 측에서 뷰 모델을 정의하고 매핑 플러그인을 사용할 수 있습니다.

나중에 들어, 어쨌든 자바에서 뷰 모델을 작성해야합니다.나는 자바 스크립트에서 직접 viewmodels을 작성하는 것이 좋습니다.

그것은 나를 위해 가장 잘 작동합니다.

관련 문제