2016-12-21 3 views
0

따르면 I는 다음 기능을 갖는다.반응성 기능 패러다임

switchMap 메서드를 살펴보면 버튼을 눌렀는지 묻습니다.

제 질문은 폐쇄 형 버튼 상태를 묻는 질문에 반응 형 패러다임을 사용하지 않습니까?

당신의 스트림이 트리거하는 방법을 모른 채
.switchMap(function (oCalendar) { 
     return oEditButton.getPressed()? Rx.Observable.of(oCalendar) : Rx.Observable.never(); 
    }) 

답변

1

, 이것은 당신은 아마 이미 짐작하지만, 당신이 가지 않은 스트림을 도입하여 가진 순수, 무 기능의 "정신"을 깨고있다 "기술적으로 확인"입니다 -state 인 경우 oEditButton - 스트림에 "외부"상태 (버튼을 눌렀는지 여부)가 있기 때문에 매번 같은 입력으로 동일한 결과가 보장 될 수 없습니다.

따라서 "청소기"방식은 oEditButtonClicked$ -event-stream과 같은 기능을 제공하므로 선택한 날짜의 처리가 트리거됩니다. 사이드 참고로

oEditButtonClicked$ 
    .switchMapTo(oCalenderSelect$) 
    .mergeMap(cal => Rx.Obserbalbe.from(cal.getSource....)) 

, 해당 이벤트 스트림을 소개 할 수없는 경우, 당신은 여전히 ​​skipWhile 사용하여 코드를 향상시킬 수 :이 해결되지 않는 (

return oCalendarSelectOb 
    .skipWhile(() => oEditButton.getPressed()) 
    .mergeMap(function (oCalendar) { 
     return Rx.Observable.from(oCalendar.getSource().getSelectedDates()); 
    }) 
    .map(function (oDateRange) { 
     return oDateRange.getStartDate(); 
    }); 

을 첫 번째 질문이지만 옆에 힌트가 있음)

+0

누군가 캘린더에서 날짜를 선택하면 스트림이 실행됩니다. –

+0

위의 첫 번째 제안을 구현했으며 예상대로 작동합니다. 정말 고마워. 초보자가 rxjs로 가능한 것은 무엇인지 알기가 너무 어렵습니다. –

+1

거의 모든 것이 가능합니다.이 질문은 개인적인 취향과 코드가 원하는 "완벽한"방법과 비슷합니다. 그러나 엄격한 기술적 측면에서 코드는 이미 유스 케이스에서 잘 작동해야합니다. – olsn