2015-07-21 43 views
1

这是一个有效的语句如何将多个侦听器分配给单个StreamSubscription?

StreamSubscription currentSubscription = querySelector(…).onClick.listen(….). 

这里有一个分配给一个StreamSubscription一个听众。

但是当你做一个queryselectorAll(..)。onClick.listen(..)。您正在将侦听器添加到所有查询选定元素。

我注意到下面的语句也是有效的。

StreamSubscription currentSubscription = queryselectorAll(..).onClick.listen(..) 

在这里,我将一个StreamSubscription分配给一个具有onClick监听器的元素列表。这个怎么用?

回答

3

您不能分配多个侦听到StreamSubscription

你的第二个陈述不起作用,因为querySelectorAll()返回一个集合,你可以不听的集合。

也许这是你想要什么:

Iterable<StreamSubscription> subscriptions = 
    queryselectorAll(..).map((e) => e.onClick.listen(..)); 

再后来

if(subscriptions != null) { 
    subscriptions.forEach((s) => s.cancel()); 
} 
+0

这是我的理解也是如此。现在使用dart 11.1,我可以在我的代码中执行此操作,并且它目前正在编译。该监听器中的代码也正确触发。 – Eternalcode

+1

你指的是倾听querySelectorAll的结果?在这种情况下,我需要自己尝试一下并检查实际发生的情况。 –

+0

是的。当我对分配了多个侦听器的流预订执行ss.cancel()时,它似乎也将所有分配的侦听器都删除了。 – Eternalcode

1

您现在收听的ElementList。我无法从文档被预期如何工作看,所以我想这是有效地接收列表中的所有元素的事件。

您仍然只收听一个数据流,的onClick数据流和您收到的StreamSubscription涉及该列表。