【发布时间】:2015-10-27 07:20:57
【问题描述】:
我一直在尝试在 Polymer Dart 1.0 元素中执行以下操作
@PolymerRegister('some-element')
class SomeElement extends PolymerElement {
...
void fireEvent() {
fire('someevent');
}
...
}
然后我以这种方式听它
<some-element on-someevent="handleSomeEvent"></some-element>
使用我在定义的聚合物元素中定义的方法
@reflectable
void handleSomeEvent([_, __]) {
...
}
问题是我得到了一个
Unhandled exception
这没有帮助,我花了一段时间才弄清楚是上面的原因造成的。如果我删除
@reflectable
来自事件处理程序方法的注释,我得到以下内容
method `registered` not defined
我想知道 Polymer Dart 1.0 中是否有处理自定义事件的特殊方法?
我可以这样处理
on['someevent'].listen(handleSomeEvent);
这确实有效,只是我不明白为什么我不能同时处理它。我想我会提交一个关于这个的错误报告,但我想我会把它放在这里并检查我是否正确地完成了这个,因为我做了什么,除了使用
@可反射
这是 Polymer Dart 1.0 特有的,是他们说你应该在 Polymer JS 中做的事情,其文档可以在 here 找到
更新 我应该澄清一下,这个异常发生在加载时,当元素被注册时。等我有更多时间的时候,我会放完整的例外。
我得到的异常如下
Exception: Uncaught Error: Unhandled exception:
Reflecting on un-marked type 'JsObjectImpl'
#0 _InstanceMirrorImpl._InstanceMirrorImpl (package:reflectable/src/reflectable_transformer_based.dart:150:9)
#1 ReflectableImpl.reflect (package:reflectable/src/reflectable_transformer_based.dart:1216:16)
#2 _setupReflectableMethods.<anonymous closure>.<anonymous closure> (package:polymer/src/common/polymer_descriptor.dart:151:49)
#3 JsObject._callMethod (dart:js:678)
#4 JsObject.callMethod (dart:js:618)
#5 PolymerRegister.initialize (package:polymer/src/common/polymer_register.dart:19:13)
#6 loadInitializers.<anonymous closure>.<anonymous closure> (package:initialize/src/static_loader.dart:46:32)
#7 _runInitQueue (package:initialize/initialize.dart:35:24)
#8 _runInitQueue.<anonymous closure> (package:initialize/initialize.dart:38:26)
#9 _RootZone.runUnary (dart:async/zone.dart:1165)
#10 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:502)
#11 _Future._propagateToListeners (dart:async/future_impl.dart:585)
#12 _Future._completeWithValue (dart:async/future_impl.dart:376)
#13 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:430)
#14 _microtaskLoop (dart:async/schedule_microtask.dart:43)
#15 _microtaskLoopEntry (dart:async/schedule_microtask.dart:52)
#16 _ScheduleImmediateHelper._handleMutation (dart:html:42565)
Stack Trace:
#0 JsObject._callMethod (dart:js:678)
#1 JsObject.callMethod (dart:js:618)
#2 PolymerRegister.initialize (package:polymer/src/common/polymer_register.dart:19:13)
#3 loadInitializers.<anonymous closure>.<anonymous closure> (package:initialize/src/static_loader.dart:46:32)
#4 _runInitQueue (package:initialize/initialize.dart:35:24)
#5 _runInitQueue.<anonymous closure> (package:initialize/initialize.dart:38:26)
#6 _RootZone.runUnary (dart:async/zone.dart:1165)
#7 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:502)
#8 _Future._propagateToListeners (dart:async/future_impl.dart:585)
#9 _Future._completeWithValue (dart:async/future_impl.dart:376)
#10 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:430)
#11 _microtaskLoop (dart:async/schedule_microtask.dart:43)
#12 _microtaskLoopEntry (dart:async/schedule_microtask.dart:52)
#13 _ScheduleImmediateHelper._handleMutation (dart:html:42565)
更多信息
下次我寻求帮助时,我将使用我正在使用的确切代码。我注释的方法
@reflectable
被称为注册。
@reflectable
void registered([_, __]) {
....
}
如果我将此方法的名称更改为其他类似的名称
@reflectable
void someOtherName([_, __]) {
...
}
没有发生异常。对此感到抱歉,我没有想到该方法的名称可能与它有关。再次抱歉,但我仍然想解释一下为什么带注释的方法的名称在这种情况下很重要。
【问题讨论】:
标签: dart dart-polymer