2015-07-21 89 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涉及該列表。