我試圖將一個自定義事件處理程序綁定到通過getter公開的EventStreamProvider的WebComponent,但它返回「Class'DivElement'沒有實例getter'onMainAction'」。當使用Dart Web UI WebComponents時,是否可以聲明性地綁定CustomEvent處理程序?
下調組件.dart代碼...
import 'dart:html';
import 'dart:async';
import 'package:web_ui/web_ui.dart';
class SegmentedButtonsListComponent extends WebComponent {
static const EventStreamProvider<CustomEvent> mainActionEvent = const EventStreamProvider<CustomEvent>("MainActionEvent");
Stream<CustomEvent> get onMainAction => mainActionEvent.forTarget(this);
}
修剪組件的使用......從main.dart
<x-segmented-buttons-list id="segmented-buttons-list" on-main-action="eventHandler($event)"></x-segmented-buttons-list>
修剪代碼...
import 'dart:html';
import 'dart:async';
import 'package:web_ui/web_ui.dart';
const EventStreamProvider<CustomEvent> mainActionEvent = const EventStreamProvider<CustomEvent>("MainActionEvent");
void eventHandler(CustomEvent event) {
print("""
Yabba Dabba Doo!
Type: ${event.type}
Detail: ${event.detail}
""");
}
void main() {
mainActionEvent.forTarget(query('#segmented-buttons-list')).listen(eventHandler);
}
的「 MainActionEvent「自定義事件正在由組件分派在此「列表」組件中實例化。
正如你可以從上面的例子看到的,如果我在main.dart中創建一個EventStreamProvider並且將組件定位到目標組件,那麼它可以正常工作(但是會繞過組件中的Stream getter)。
這將是偉大的,但如果我可以省卻main.dart中的EventStreamProvider並簡單地綁定到組件上的onMainEvent getter。
這可能嗎?
更新2013年5月5日: Siggi解釋如下,目前這是不可能做到這一點,但通過元素的XTAG引用組件的CustomEventProvider的獲取方式。 我發現我不得不在main()完成後使用一個Timer來查詢DOM,因爲在main()事件循環完成之前,xtags不會被填充。
void postMainSetup() {
query('#segmented-buttons-list').xtag.onMainAction.listen(eventHandler);
}
void main() {
Timer.run(postMainSetup);
}
通過上述設置,不需要新的CustomEventProvider來監視組件。