class MyData {
String name;
String age;
MyData(this.name, this.age);
}
...
class AlertSimulatorElement extends PolymerElement {
void handleClick(e,d,t) {
asyncFire('polymer-signal',detail: new MyData("Mike",99));
// this works:
//asyncFire('polymer-signal', detail: {'name': "foo", 'data': "Foo!"});
}
}
asynFire给了我:
Exception: Class 'MyData' has no instance method '[]'.
NoSuchMethodError : method not found: '[]'
Receiver: Instance of 'MyData'
Arguments: ["name"]
我使用的是Chromium版本33.0.1750.48(251129(和聚合物0.9.5
医生说我可以使用Object,但这似乎是错误的?有什么提示吗
PolymerElement#fire:http://goo.gl/DYXMiZ
thx
Günter把我的方向指向了正确的方向-这是polymer_signals.dart*中的一个错误
polymer_signals.dart(49号线(
@initMethod
void registerListener() {
// signal listener at document
document.addEventListener('polymer-signal', (e) {
_notify(e.detail['name'], e.detail['data']);
});
}
作为目前的解决方案:
// (sender.dart)
asyncFire('polymer-signal',detail: { 'name' : "alertevent", 'data' : new MyData("Mike",47) });
// (receiver.html)
<polymer-element name="mm-alert-list" on-add-alert-event="{{handleAddAlert}}">
...
<polymer-signals on-polymer-signal-alertevent="{{fooSignal}}"></polymer-signals>
</polymer-element>
// (receiver.dart)
...
@CustomTag('mm-alert-list')
class AlertListElement extends PolymerElement {
...
fooSignal(final CustomEvent event, detail, sender){
print('<br>[my-app] got a [' + detail.name + '] signal<br>');
}
...
}
});
[更新]提交了一个错误:https://github.com/ErikGrimes/polymer_elements/issues/143
有一个限制,即事件详细信息只允许基元类型(String、int、double(、List、Map或其中的List或Map。我以为这个限制几个月前就消失了,但也许它又回来了。
编辑
我只是在没有聚合物的情况下尝试了一下,它起到了的作用
var b = dom.querySelector('#button');
b.onClick.listen((e) {
b.dispatchEvent(new dom.CustomEvent('polymer-signal',detail: new MyData("Mike","99")));
});
如果使用this
(聚合物元素(而不是b
,这也应该有效。