2015-10-26 76 views
1

我一直试图做一些像聚合物飞镖1.0元素中以下你如何听聚合物飞镖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 

我想知道是否有处理高分子飞镖1.0自定义事件以特殊的方式?

我能应付这不工作这样

on['someevent'].listen(handleSomeEvent); 

,它只是我不明白为什么我不应该能够处理两者兼得。我想我会提交一个关于此的错误报告,但我想我会把它放在这里,并检查看看我是否正确地做了这件事,因为我所做的除了使用

@reflectable

是聚合物飞镖1.0具体的,是他们在说什么,你应该在聚合物JS其文档可以发现here

UPDATE 我要澄清,这个例外发生在加载时,做的是正在注册的元素时。当我有更多时间时,我会在后面填写完整的例外。

我得到的例外是以下

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([_, __]) { 
    ... 
} 

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

回答

0

这很好。

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

您能否在GitHub仓库中提供该项目以允许重现该问题?

另外一个方法是

@Listen('someevent') 
void handleSomeEvent([_, __]) { 
    ... 
} 

(你不需要任何补充HTML此方法)。

+0

我还没有关于Github的项目,这再现了问题。今天晚些时候我会放一个。我也会看看@Listen注释,但我的原始方法应该已经工作了。 –

+0

当然,你的原始方法应该工作。我猜这个例外是由方法内部的代码引发的,而不是由Polymer引发的。预计将删除'@ reflectable'后的异常。 –

+0

啊不,它不是方法里面的代码,因为我删除了除print语句之外的所有代码,并且它仍抛出异常。我应该澄清,这个异常发生在加载时。 –

相关问题