在Polymer中触发CustomEvent会给我"例外:Class' MyData'没有实例方法' []'"

时间:2014-04-09 12:28:09

标签: dart dart-polymer

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"]

我使用的是铬版本33.0.1750.48(251129)和聚合物0.9.5

Doc说我可以使用Object但这似乎是错的?任何提示?
PolymerElement #fire:http://goo.gl/DYXMiZ
THX

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

存在一个限制,即只允许基本类型(String,int,double),List,Map或List或Map of on on事件详细信息。我认为这个限制在几个月前消失了,但也许它又回来了。

编辑

我只是在没有聚合物的情况下尝试了它并且它起作用了

var b = dom.querySelector('#button');
b.onClick.listen((e) {
  b.dispatchEvent(new dom.CustomEvent('polymer-signal',detail: new MyData("Mike","99")));
});

如果您使用this(您的Polymer元素)而不是b,这也应该有用。