我在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回購的引用)。 聚合物更多是構建獨立的元素/小部件而不是應用程序框架,因此缺少這樣的功能。 –