dart - 您如何在Polymer Dart 1.0中监听自定义事件?

标签 dart dart-polymer

我一直在尝试在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);

确实有效,只是我不明白为什么我不能同时使用这两种方式。我以为会提交有关此问题的错误报告,但我想将其放在此处并检查是否可以正确执行此操作,因为除了使用之外,我所做的

@reflectable

他们说您应该在Polymer JS中执行的操作是Polymer Dart 1.0,可以在here中找到其文档

更新
我应该澄清一下,此异常发生在加载时,当元素被注册时。当我有更多时间时,我将在以后提出完全异常(exception)。

我得到的异常是以下
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([_, __]) {
    ...
}

不会发生异常。抱歉,我没有想到方法的名称可能与它有关。再次抱歉,但是在这种情况下,我仍然想对为什么带注释的方法的名称很重要进行一些解释。

最佳答案

很好

@reflectable
void handleSomeEvent([_, __]) {
    ...
}

您可以在允许重现该问题的GitHub存储库中提供该项目吗?

另一种方法是
@Listen('someevent')
void handleSomeEvent([_, __]) {
    ...
}

(您无需为此方法向HTML添加任何内容)。

关于dart - 您如何在Polymer Dart 1.0中监听自定义事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342798/

相关文章:

dart - 使用 Polymer 将 DateTime 绑定(bind)到日期输入字段

flutter - 如何在 PopupMenuItem 中使用 onTap 或 onPressed

flutter - 如何:在TextFormField中键入时,每4个字符后添加一个空格

android - Flutter - 导航到新屏幕,并清除所有以前的屏幕

dart - 聚合物 paper_input 的数据绑定(bind)不起作用

dart - Dart- polymer 单元测试。点击事件后无法引用dom元素

firebase - 无法弄清楚如何从功能中的Firestore文档中读取数据

flutter - 如何使用 flutter 检查输入的电话号码是否有效?

dart - Polymer.dart <property>更改的功能不适用于 map

dart - 导入并使用 Polymer-Dart 1.0.0 候选发布版