我需要在我的网页上管理许多Web组件的全局状态。 (例如,每个Web组件都有一个“选择”按钮/功能,我跟踪组件以确保一次只选择一个组件。)
要管理组件的全局状态,每个Web组件都会向我的主Web应用程序中的公共处理程序提供事件流。不幸的是,我需要我的处理程序知道它是从哪个流/ web组件调用来管理全局状态。我的处理程序如何获取此信息?
以下是我的示例代码:
// _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.
}
答案 0 :(得分: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) {
...
}