【发布时间】:2015-02-16 08:36:49
【问题描述】:
在我的自定义元素中,我有一些元素,它们具有“输入”属性。它们都调用相同的函数。因此,在输入元素的每次更改时,都会调用该函数。但我想从第一个事件中获取 StreamSubscription,如果函数完成,暂停它并重新启动它。
那么有没有办法从 'on-*' 属性中获取 StreamSubscription 呢?
从 Dart 代码中设置 onInput 事件不是一个选项。
【问题讨论】:
在我的自定义元素中,我有一些元素,它们具有“输入”属性。它们都调用相同的函数。因此,在输入元素的每次更改时,都会调用该函数。但我想从第一个事件中获取 StreamSubscription,如果函数完成,暂停它并重新启动它。
那么有没有办法从 'on-*' 属性中获取 StreamSubscription 呢?
从 Dart 代码中设置 onInput 事件不是一个选项。
【问题讨论】:
如果您强制添加事件侦听器,这正是您所得到的。
$['my-input'].onXxx.listen...
或
$['my-input'].on['Xxx'].listen...
请阅读您的最后一句话。为什么它不是一个选项?
您可以创建自己的 StreamController 并将事件添加到声明式分配的事件处理程序中。
StreamController<Event> _inputController = new StreamController<Event>();
Stream<Event> get onInput => _inputController.stream;
void inputHandler(Event e) {
_inputController.add(e);
}
如果需要,您可以将onInput 设为广播流
Stream<Event> _inputStream = _exitController.stream.asBroadcastStream();
...
// subscribe to the event
onInput.listen...
但是这样你得到的基本上和你直接使用上面显示的元素的事件流一样。
【讨论】:
querySelectorAll([custom-event]').forEach((e) = e.on[e.attributes['event-name']].listen...` 其中custom-event 属性仅用于选择元素event-name="input" 可以是第二个属性,指示要监听的事件。