我有一個類創建一個按鈕,並將監聽器連接到click事件。在一個子類中,我想要替換超類處理程序。此代碼添加了一個偵聽器:如何替換飛鏢中的聽衆?
row.query("[value='Save']").onClick.listen(handleNewAlert);
如何刪除現有的偵聽器?
我有一個類創建一個按鈕,並將監聽器連接到click事件。在一個子類中,我想要替換超類處理程序。此代碼添加了一個偵聽器:如何替換飛鏢中的聽衆?
row.query("[value='Save']").onClick.listen(handleNewAlert);
如何刪除現有的偵聽器?
格雷格的答案描述瞭如何取消訂閱事件源。 這是正確的,但國際海事組織有點尷尬,因爲你需要保持訂閱實例,以防止任何派生類想取消它,或者如果你想隱藏的話,你需要在基類上提供一個方法細節。
正如你所說,你想替換處理程序,我理解提供了一個不同的實現,更簡單的方法是在派生類中重寫handleNewAlert
方法。
當然,如果不是方法名稱指定了匿名函數,因爲它顯然不能被覆蓋,但在示例中顯示的場景中,這可能是一種更簡單的方法。
Stream.listen()方法返回一個StreamSubscription對象。請致電StreamSubscription.cancel()取消事件監聽器。
var subs = element.onClick.listen((e) => print(e));
// Remove the listener.
subs.cancel();
// Add another listener.
element.onClick.listen((e) => print(e));
有關更多信息,請參閱此article。
優秀的迴應。你遇到了跟蹤訂閱方法的所有問題,並提供了更直接的方法。謝謝! – 2013-05-15 15:27:39