것은 이제 내가 처음 이 클릭 핸들러에 대해 아무것도 모르는 다른 코드에있어 가정 해 봅시다,하지만 난 다른 하나를 등록합니다.
스트림에 두 개의 수신기가 있다는 것을 알 수 있습니까?
아니요. 청취자가 다른 청취자에 대해 알아야한다고 생각하지 않기 때문에 스트림 클래스를 확장하거나 랩핑하여이 기능을 직접 제공 할 수는 있지만 좋은 디자인 선택의 여지가 없습니다. 정확히 무엇을하려는 거니? 아마도 청중들에게 서로에 대해 알리는 것보다 더 좋은 방법이있을 것입니다.
다른 모든 가입자를 일시 중지하거나 취소 할 수 있습니까?
cancel/pause/resume 당신은 상대방 만 취급 할 수 있습니다. 다시 말하지만, 다른 리스너를 건드리지 않아야합니다.하지만 Stream 클래스를 래핑하거나 확장하여 이러한 동작을 수행 할 수 있다고 생각합니다.
다른 곳에서 button.onClick.asBroadcastStream()을 다시 작성하면 main에서 사용 된 것과 같은 스트림을 가리 킵니까?
아니요, 적어도 SDK의 현재 버전은 아닙니다. 따라서 불행하게도이 방송 스트림에 대한 참조를 어딘가에 저장하고 참조해야합니다. asBroadcastStream()
번을 여러 번 호출하면 예상 한 결과가 나오지 않으므로 참조해야합니다. (참고 : 적어도 빠른 테스트를 기반으로 : http://d.pr/i/Ip0Kdocumentation이 다른 것으로 보이는 것 같지만 시간을 찾으면 아직 테스트하지 않은 상태입니다.)
처리기 중 하나에서 다른 브로드 캐스트 수신기에 이벤트를 전달할 수 없다고 말할 수 있습니까?
글쎄, 여기에는 HTML 랜드에 stopPropagation()
이 있습니다. 즉, 이벤트가 다른 요소로 전파되지는 않지만 아마도 사용자가 찾고 있었던 것이 아닙니다.
다른 리스너에서 이벤트 발생을 중지하려면 리스너가 호출되는 순서가 있어야합니다. 나는 그 순서가 그 청자들의 등록 순서라고 믿는다.디자인 관점에서 볼 때 청취자가 다른 사용자를 취소/일시 중지 할 수있는 것은 좋지 않을 것이라고 생각합니다.
HTML의 이벤트 전파는 그것이 계층 구조에 관한 것이기 때문에 의미가 있습니다.하지만 여기서는 HTML의 이벤트가있는 경우에도 단일 요소에 대해 여러 개의 수신기가있을 수 있습니다.
수신자에게 가중치를 할당하거나 중요도 순서를 정의 할 방법이 없으므로 이벤트를 중지 할 수있는 방법이 없다는 것은 놀라운 일이 아닙니다.
청중에게 서로에 대해 알리고 서로 조작하게하는 대신 어쩌면 다른 방법으로 문제에 접근하려고 생각해보십시오.
소비자입니까?
StreamConsumer
은 다른 스트림을 클래스에 파이프 할 수있게하려는 경우 구현할 수있는 클래스입니다.
당신은'asBroadcastStream()'에 대해 틀렸어. –
음, 틀렸을 수도있다.이 코드는 http://d.pr/i/Ip0K 그러나 첫 번째'false' 다음에'true'를 출력한다. 그래서 그들은 다른 대상을 가리 킵니다. 시간을 찾으면 자세히 조사 할 수 있습니다. 코드베이스도 변경 될 수 있으며 답변에 연결된 항목이 예를 들어와 다릅니다. SDK의 스트림 구현 :) –
코드가 두 개의 브로드 캐스트 스트림을 만듭니다. 생성 한 첫 번째 브로드 캐스트 스트림에서 asBroadcastStream()을 호출하면 동일한 결과를 얻습니다. 그것은 무엇이 요구되는지입니다. 스트림 구현은 브로드 캐스트 스트림 인 경우이를 반환합니다. 질문에 사용 된 스트림을 언급했습니다. –