2016-07-13 2 views
2

서버에서 두 개의 응답을 정규화하고 normalizr을 사용하여 내 저장소에 저장해야합니다. 첫 번째 응답은 섹션을 제공하고 두 번째 응답은 게시물을 제공합니다. 섹션에는 개의 게시물이 많이 있습니다. 하나의 게시물섹션 중 하나만입니다.Normalizr로 중첩 된 중첩 트리가 아닌 정규화

먼저 응답 (섹션) :

[ 
    { 
    id: 10, 
    title: "foo" 
    }, 
    ... 
] 

두 번째 응답 (게시물) :

{ 
    entities: { 
    sections: { 
     10: {title: "foo", posts: [2, 5, 12, 152]}, 
     15: {title: "example", posts: [1, 8]}, 
     ... 
    }, 
    posts: { 
     1: {id: 1, sid: 15, title: "abc", text: "something"}, 
     2: {id: 2, sid: 10, title: "foo", text: "foo foo"}, 
     ... 
    } 
    } 
} 
:이 스키마에 응답을 정상화 할

[ 
    { 
    id: 2, 
    sid: 10, //id of the section 
    title: "foo", 
    text: "foo foo" 
    }, 
    ... 
] 

싱크 응답이 중첩되어 있지 않습니다. 스키마를 정의하는 방법을 모르겠습니다.

답변

2

간단한 코드로 할 수 있을까요? 도서관이 없으면? OO

var posts = [ ... ]; // some posts here 
var sections = [ ... ]; // some sections here 
var schema = { entities: { sections: {}, posts: {} } }; 

for (var i = 0; i < sections.length; i++) { 
    var section = sections[i]; 
    schema.entities.sections[section.id] = { 
     title: section.title, 
     posts: [] 
    } 
} 

for (var j = 0; j < posts.length; j++) { 
    var post = posts[j]; 
    schema.entities.posts[post.id] = post; 
    schema.entities.sections[post.sid].posts.push(post.id); 
} 
+1

이것은 좋은 대답입니다. Normalizr은 디 네비 트해야하는 단일 JSON 객체를 처리합니다. 먼저 답을 함께 나눠서 정상적인 방법으로 실행해야합니다. 이 대답은 훨씬 간단한 해결책입니다. –

+0

@PaulArmstrong 음, 실제로는 비정규화할 때 의미가 있습니다. 우리는 나머지 API를 가지고 있으며 JSON은 깊이 중첩되어 있지 않지만 우리는 컴포넌트에서 반응하는 비정규 객체를 선호합니다. 그것을위한 일반적인 방법을 가지고있는 것이 좋을 것입니다. – Veikedo