2013-05-12 2 views
2

웹 페이지에서 여러 웹 구성 요소의 전역 상태를 관리해야 할 필요가 있습니다. (예 : 각 웹 구성 요소에는 "선택"버튼/기능이 있으며 구성 요소를 추적하여 한 번에 하나의 구성 요소 만 선택합니다.)이벤트 핸들러 내에서 이벤트 스트림에 대한 참조를 얻으려면 어떻게해야합니까?

각 구성 요소의 전역 상태를 관리하기 위해 각 웹 구성 요소는 이벤트를 내 메인 웹 앱의 공통 핸들러에 전달합니다. 불행히도 전역 상태를 관리하기 위해 호출 된 스트림/웹 구성 요소를 파악하려면 처리기가 필요합니다. 내 처리기는이 정보를 어떻게 얻을 수 있습니까? 바로, 내가 제대로 이해하면

// _webComponents is a list of references to each component. 
// getStream() gets a stream of events from each component. 
// connections is a list of streams from all my web components. 
_webComponents.forEach((connection)=>connections.add(connection.getStream())); 
connections.forEach((Stream<String> connection)=>connection.listen(eventHandler)); 


void eventHandler(webComponentEvent){ 
    // ?? How do i find out which web component the event came from ?? 
    // ToDo: use event and web component info to manage a global state of web components. 
} 

답변

3

, 당신은 당신의 처리기에서 보낸 사람을 알고 싶어 여기

내 샘플 코드인가?

두 가지 옵션이 있습니다. 첫 번째는 데이터의 일부로 보낸 사람을 보내는 것입니다 :

class Dog { // controller and stream initialization removed for brevity 
    Stream get onBark => ...; 
    void bark(){ 
    // of course, you can have a typed object instead of map 
    _barkController.add({'sender': this, 'data': 'woof'}); 
    } 
} 

// attach to source 
var dog = new Dog(); 
dog.onBark.listen((event) { 
    sender = event['sender']; 
    data = event['data']; 
    ... 
}); 

또 다른 옵션은 폐쇄에 보낸 사람을 결합하는 것입니다. 이 스트림의 유형을 변경 할 필요가 없습니다 (그래서 당신은 여전히 ​​Stream<String> 대신 Stream<Map>해야합니다!..

sources.forEach((src) => src.listen((data) => handleEvent(src, data))); 

void handleEvent(Connection sender, String data) { 
    ... 
} 
+0

정말 고마워요 내가 두 번째 옵션을 좋아 그것은 매력을 좋아 일했다 –

+0

천만에요 다행스럽게 도울 수있어. –

관련 문제