我有一个类创建一个按钮,并将监听器连接到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