getter를 통해 노출 된 EventStreamProvider가있는 WebComponent에 사용자 지정 이벤트 처리기를 바인딩하려고했지만 "클래스 'DivElement'에 인스턴스 getter 'onMainAction'이 없습니다."이 있습니다.다트 웹 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() 이벤트 루프가 끝날 때까지 xtags가 채워지지 않아 main()이 완료된 후 Tim을 사용하여 DOM을 쿼리해야한다는 것을 알게되었습니다.
void postMainSetup() {
query('#segmented-buttons-list').xtag.onMainAction.listen(eventHandler);
}
void main() {
Timer.run(postMainSetup);
}
위의 설정을 사용하면 구성 요소를 모니터링하는 데 새 CustomEventProvider가 필요하지 않습니다.