gpt4 book ai didi

google-closure - 在自定义对象上实现 EventTarget

转载 作者:行者123 更新时间:2023-12-03 02:52:00 26 4
gpt4 key购买 nike

使用闭包库,您可以让任何对象能够调度扩展 goog.events.EventTarget 的事件。 .这目前可以使用 Dart 库吗?

我想它看起来像这样:

#import('dart:html');

class Foo implements EventTarget {
Events get on() {
// ???
}
}

main() {
Foo foo = new Foo();

// Subscribe to the event.
foo.on['bar'].add((Event event) => print('bar!'));

// Dispatch the event.
foo.on['bar'].dispatch(new Event('bar'));
}

我在正确的轨道上吗?

编辑 感谢 Lars Tackmann,这里有一份工作草案: http://try.dartlang.org/s/f6wk

最佳答案

您可以通过多种方式执行此操作,一种方法是使用 类型定义 's 来定义一个通用的处理函数:

class Event {
final String type;
Event(this.type);
}

typedef EventHandler(Event event);

interface EventTarget {
Map<String,EventHandler> get on();
void dispatch(Event event);
}

class Foo implements EventTarget {
Map<String, EventHandler> _handlers;
Foo() {
_handlers = new Map();
}

Map<String, EventHandler> get on() {
return _handlers;
}

dispatch(Event event) {
EventHandler handler = _handlers[event.type];
handler(event);
}
}

main() {
Foo foo = new Foo();

foo.on['bar'] = (Event event) => print('handling event ${event.type}');

foo.dispatch(new Event('bar'));
}

我为你制作了一个 DartBoard 片段 here玩。

您可能想尝试制作 事件目标 到一个基类中,除非它弄乱了你的继承策略(在这种情况下,你可以用工厂注入(inject)的事件总线可能更合适)。

关于google-closure - 在自定义对象上实现 EventTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8624075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com