Polymer adds event listeners to elements declaratively using attribute names in HTML as input. For example, <a on-click="foo"> in an element template adds a listener as if the user did: <a>.addEventListener('click', e => this.foo(e)).
Since HTML attribute names are not case sensitive, supporting any casing requires a convention. For properties Polymer does dash->camel casing to map attribute names to properties names (foo-bar becomes fooBar) but it does not do this for events. Notably Polymer notification events include dashes (e.g. name-changed) so we expect lots of user code relies on this convention.
This means that it's currently not possible to declaratively listen to events like camelEvent, CAPSEvent, or PascalEvent.
We could consider introducing a new syntax to support this. A couple of options:
- Use
_ in events to indicate "remove the _ and replace the next character with uppercase".
- Add a special attribute name like
polymer-events within which the value is used to declare events like `polymer-events="lowercaseevent: handler1, cameEvent: handler2, CAPSEvent: handler3" ...
This will cause Polymer to fail ~6 tests (as of this issue) at https://custom-elements-everywhere.com/
Polymer adds event listeners to elements declaratively using attribute names in HTML as input. For example,
<a on-click="foo">in an element template adds a listener as if the user did:<a>.addEventListener('click', e => this.foo(e)).Since HTML attribute names are not case sensitive, supporting any casing requires a convention. For
propertiesPolymer does dash->camel casing to map attribute names to properties names (foo-barbecomesfooBar) but it does not do this forevents. Notably Polymer notification events include dashes (e.g.name-changed) so we expect lots of user code relies on this convention.This means that it's currently not possible to declaratively listen to events like
camelEvent,CAPSEvent, orPascalEvent.We could consider introducing a new syntax to support this. A couple of options:
_in events to indicate "remove the _ and replace the next character with uppercase".polymer-eventswithin which the value is used to declare events like `polymer-events="lowercaseevent: handler1, cameEvent: handler2, CAPSEvent: handler3" ...This will cause Polymer to fail ~6 tests (as of this issue) at https://custom-elements-everywhere.com/