Polymer.dart 1.0.0-rcx 中的事件处理程序需要什么签名

What signature is required for an event handler in Polymer.dart 1.0.0-rcx

<child-element> 触发类似

的事件
fire('spoken', detail: {'message': this.$['myInput'].value});

<parent-element>

一样处理事件
<div on-spoken="heard">
  <child-element></child-element>
  <div>{{message}}</div>
</div>

// @eventHandler <= 1.0.0-rc.1
@reflectable
void heard(Event e) {
  set('message', 'heard: ' + e.detail['message']);
}

这导致

Closure call with mismatched arguments: function 'call'

NoSuchMethodError: incorrect number of arguments passed to method named 'call' Receiver: Closure: (Event) => void from Function 'heard':. Tried calling: call(Instance of 'CustomEventWrapper', _LinkedHashMap len:1)

事件处理程序应具有此签名

// @eventHandler <= 1.0.0-rc.1
@reflectable
void heard(Event e, var detail) {
  set('message', 'heard: ' + detail['message']);
}

为了在您还想直接从代码中调用事件处理程序并且不使用处理程序中的参数的情况下更加方便,您可以将一个或两个参数设为可选。

@reflectable
void heard(Event e, [_]) {
  set('message', 'heard');
}

@reflectable
void heard([_, __]) {
  // do something
}