我在GitHub上更新了我的Polymer-Sample。它显示了两种讨论的方法:基于事件总线(已经存在)和新的DOM事件方法。 (一个我喜欢 - 更清洁)
工作示例(铬)
https://rawgithub.com/MikeMitterer/DART-Sample-PolymerHelloWorld/master/build/index.html
代码:
https://github.com/MikeMitterer/DART-Sample-PolymerHelloWorld/tree/master/web
我所做的一些细节:
的index.html
<!DOCTYPE html>
<html>
<head>
<link rel="import" href="hello-world/hello-world.html">
<link rel="import" href="event-handler/event-handler.html">
<link rel="import" href="stopwatch/stopwatch.html">
<script type="application/dart">export 'package:polymer/init.dart';</script>
</head>
<body>
<h1>Hi first world!</h1>
<!-- event-handler should show some events coming in from hello-world -->
<event-handler>
<hello-world></hello-world>
</event-handler>
<script src="packages/browser/dart.js"></script>
</body>
</html>
HELLO-world.html
元,如果你点击“触发事件” - 按钮将触发一个事件。这也可能是一个错误的消息...
<!DOCTYPE html>
<polymer-element name="hello-world">
<template>
<button on-click="{{increment}}">Click Me</button>
<button on-click="{{fireevent}}">Fire an event (received by event-handler)</button>
<p>Hello from inside a custom element! Clicks: {{count}}</p>
</template>
<script type="application/dart" src="hello-world.dart"></script>
</polymer-element>
HELLO-world.dart
import 'package:polymer/polymer.dart';
import 'package:event_bus/event_bus.dart';
import 'package:PolymerHelloWorld/globaleventbus.dart';
import 'dart:html';
import 'dart:math';
import 'package:json/json.dart' as JSON;
@CustomTag('hello-world')
class HelloWorldElement extends PolymerElement {
final EventBus _eventbus = new GlobalEventBus();
@observable int count = 0;
HelloWorldElement.created() : super.created();
void increment(Event e, var detail, Node target) {
count += 1;
_eventbus.fire(GlobalEventBus.basicClickEvent,"Test");
}
void fireevent(Event e, var detail, Node target) {
final Random random = new Random();
final Map json = { 'response' : 'Hi, this is a message', 'random' : random.nextInt(100)};
// Fires a JSON-Message
fire("hello-event",detail: JSON.stringify(json));
}
}
事件处理程序。HTML 模板接收 “你好事件”
<!DOCTYPE html>
<polymer-element name="event-handler" on-hello-event="{{handleHelloEvent}}">
<template>
<style>
.error { color: red; }
</style>
<p class="error">EventHandler (Shows hello-world events!) Message: {{response}}, Random number: {{randomnumber}}</p>
<content></content>
</template>
<script type="application/dart" src="event-handler.dart"></script>
</polymer-element>
事件handler.dart 实现handleHelloEvent在根据模板
import 'package:polymer/polymer.dart';
import 'package:json/json.dart' as JSON;
@CustomTag('event-handler')
class EventHandler extends PolymerElement {
@observable String response = "";
@observable int randomnumber = 0;
EventHandler.created() : super.created();
void handleHelloEvent(Event e, var detail, Node target) {
final Map json = JSON.parse(detail);
response = json['response'];
randomnumber = json['random'];
// Log to console
print("Received event! $detail");
}
}
定义这就是它 - 如果你知道它如何工作 - 就像馅饼一样简单!
的恕我直言,这将是更好的,而不是扩展/改善你的问题发表评论的。我刚看到你已经下了决心。 另请参见我的扩展答案 –
EventBus是/我的计划B - 我只是认为必须有一些内容支持聚合器,支持元素边界的异常处理 - 似乎并非如此。顺便说一下,我使用这个EventBus:http://pub.dartlang.org/packages/event_bus - 工程很好。 –
我链接到的EventBus示例是此EventBus程序包的简化版本(代码具有对GitHub回购的引用)。 聚合物更多是构建独立的元素/小部件而不是应用程序框架,因此缺少这样的功能。 –