2016-06-18 2 views
1

두 개의 스토어 - GroupsStore 및 ItemsFilterStore가 있습니다. ItemsFilterStore의 상태는 GroupsStore에서 사용할 수있는 그룹의 단일 그룹의 선택을 포함해야하지만, (카테고리 목록이 상점 A에서 사용 가능 해지면 하나의 카테고리를 선택하고 상점 B에서 ID를 설정하십시오.

  • 그룹이 GroupsStore에서 처음에 사용할 수없는, 그래서 ItemsFilterStore의 선택은 처음 만들어 질 수 없다 생성자는 그것을 null로 초기화합니다.

  • 일단 그룹이 GroupStore에서 사용 가능하게되면, (논리에 따라) 하나의 그룹을 선택하고 ItemsFilterStore에서 ID를 설정하는 작업을 수행해야합니다.

인한 문제 :

나는 가게에서 액션 핸들러에서 작업을 트리거 것은 안티 패턴입니다 EVERYWHERE를 참조하십시오.

어떻게 올바르게 설계해야합니까?

+0

나는 비슷한 문제를 직접 파악하기가 어려웠다. 좀 더 자세한 정보를 제공 할 수 있습니까? 어떻게 GroupsStore를 채우십니까? 내가 처음 알다시피 그것은 비어 있습니다. 다음에 어떻게 될까요? ajax 요청은 뷰의 액션에 의해 트리거되거나 데이터를 어디에서 가져 옵니까? –

+0

ajax 요청은 검색 필터 UI의 componentDidMount()에서 호출 된 작업에 의해 트리거됩니다. 소스를 사용하고 있기 때문에, 아약스 약속을 얻지 못했습니다. 소스 메커니즘이 그것을 숨 깁니다. 게다가 점포는 서로에 대해 알지 않아야하며,이 원칙은 첫 번째 점포의 resultsReceived() 처리기의 몸체 안의 다른 점포를 비웃는 것을 금지합니다. 여기서 alt가 실패합니다. 상점간에 설계된 종속성을 금지하고 상점 외부의 코드에서 이러한 종속성을 표현하는 것이 불가능하도록 규칙을 조정합니다. 결국 나는 규칙을 위반하기로 결정했습니다. –

답변

0

글쎄, 나는이 사건을 처리 할 수있는 두 가지 방법을 생각해 냈다. 명확성을 위해 소스에 대한 요청을 실행하는 getGroups 액션이 있다고 가정 해 보겠습니다. 요청이 성공하면 resultsRecieved이라는 GroupsStore 핸들을 실행합니다.

1) resultsRecieved 작업을 두 저장소에서 모두 청취하고 결과를 처리하여 ItemsFilterStore을 업데이트 할 수 있습니다. 그러나이 경우 그룹 선택 논리를 GroupsStore에서 일부 유틸리티 파일로 추출해야합니다.이 유틸리티 파일은 가능하면 두 저장소 모두에서 가져 와서 사용할 수 있습니다.

2) 두 상점에서 getGroups 작업을 청취 할 수 있습니다. 해당 작업에 대한 ItemsFilterStore 처리기에서 Alt의 wait-for 메서드를 활용하면이 저장소가 해당 데이터의 다른 저장소에 종속되어 있음을 알리고이를 업데이트 할 때까지 기다려야합니다. 그래서 ItemsFilterStore의 기능 getgroups 핸들러는 결국 다음과 같이 보일 수 있습니다

getGroups() { 
    this.waitFor(GroupsStore); 
    var groups = GroupsStore.getState().groups; 
} 

내가에만 동기 작업을 기다릴를 사용하기 때문에, 비동기 소스 요청을 작동 얼마나 좋은 대기 완전히 확실하지 않다.

+0

아직 테스트하지는 않았지만 이미 getStack이 getGroups() 액션 핸들러를 완료하기를 기다리기 때문에 메서드 2가 작동하지 않을 수 있다고 이미 말할 수 있습니다. '이것 후에.waitFor (GroupsStore);''GroupsStore'가 요청을 완료하고 결과를 사용할 수있는 것이 아니라 Ajax 요청을 시작했는지 확인할 수 있습니다. 방법 1) 시도해보고 결과를 알려 드리겠습니다. 어떤 이유로 나는 ItemsFilterStore가 다른 상점의 액션과 춤을 추면 명예 살해를 당할 것이라고 믿었습니다 (아마도 alt 웹 사이트에 대한 예제가 없기 때문일 것입니다). –

+0

그리고 그 전에는 생각하지 않았지만, 아마도'''resultsRecieved'' 핸들러를 사용하여 GroupsStore 내부의 업데이트를 기다리고 데이터를 사용할 수도 있습니다. –