Я только начинаю пытаться использовать веб-компоненты и сталкиваюсь с проблемой, пытаясь добавить прослушиватели событий к элементам в моем пользовательском веб-компоненте.
Мой шаблон выглядит так:
<dom-module id="quadimageview">
<template>
<template is="dom-if" if="[[!issingleview]]">
<div id="gridViewContainer" class="grid-view">
<div id="topLeftCell" class="grid-cell">
<select id="colorTL" class="color-select" value="{{TLColor::change}}">
<template is="dom-repeat" items="[[colors]]">
<option selected$="[[optionSelected(item.value, TLColor)]]" value="[[item.value]]">[[item.name]]</option>
</template>
</select>
<imageviewer id="gridTLImgViewer"
definedscan="[[TLColor]]"
viewerheight="100%"
viewerposition="none"
zoomcontrol>
</imageviewer>
</div>
<div id="topRightCell" class="grid-cell">
<select id="colorTR" class="color-select" value="{{TRColor::change}}">
<template is="dom-repeat" items="[[colors]]">
<option selected$="[[optionSelected(item.value, TRColor)]]" value="[[item.value]]">[[item.name]]</option>
</template>
</select>
<imageviewer id="gridTRImgViewer"
definedscan="[[TRColor]]"
viewerheight="100%"
viewerposition="none">
</imageviewer>
</div>
<div id="bottomLeftCell" class="grid-cell">
<select id="colorBL" class="color-select" value="{{BLColor::change}}">
<template is="dom-repeat" items="[[colors]]">
<option selected$="[[optionSelected(item.value, BLColor)]]" value="[[item.value]]">[[item.name]]</option>
</template>
</select>
<imageviewer id="gridBLImgViewer"
definedscan="[[BLColor]]"
viewerheight="100%"
viewerposition="none">
</imageviewer>
</div>
<div id="bottomRightCell" class="grid-cell">
<select id="colorBR" class="color-select" value="{{BRColor::change}}">
<template is="dom-repeat" items="[[colors]]">
<option selected$="[[optionSelected(item.value, BRColor)]]" value="[[item.value]]">[[item.name]]</option>
</template>
</select>
<imageviewer id="gridBRImgViewer"
definedscan="[[BRColor]]"
viewerheight="100%"
viewerposition="none">
</imageviewer>
</div>
</div>
</template>
</template>
</dom-module>
И мой сценарий выглядит так:
<script>
require("jquery-ui/ui/widgets/resizable");
require("leaflet.sync");
class Quadimageview extends Polymer.LightDomElement {
constructor() {
super();
this.loadedViewers;
this.TLColor = 'EngineeringBlue';
this.TRColor = 'EngineeringGreen';
this.BLColor = 'EngineeringYellow';
this.BRColor = 'EngineeringRed';
this.colors = [
{ value: 'EngineeringBlue', name: 'FL-Blue' },
{ value: 'EngineeringGreen', name: 'FL-Green' },
{ value: 'EngineeringRed', name: 'FL-Red' },
{ value: 'EngineeringYellow', name: 'FL-Yellow' },
{ value: 'EngineeringBfBlue', name: 'BF-Blue' },
{ value: 'EngineeringBfGreen', name: 'BF-Green' },
{ value: 'EngineeringBfRed', name: 'BF-Red' },
];
}
static get is() { return 'quadimageview'; }
static get properties() {
return {
issingleview: {
type: Boolean,
value: false
}
}
}
ready() {
super.ready();
this.initialize();
}
optionSelected(value, match) {
return value == match;
}
setupSync(viewer) {
console.log(this.loadedViewers);
if (this.loadedViewers) {
this.loadedViewers.forEach(function (element) {
if (element.map && viewer.map) {
element.map.sync(viewer.map);
viewer.map.sync(element.map);
}
});
this.loadedViewers.push(viewer);
}
else {
this.loadedViewers = [ viewer ];
}
}
initialize() {
console.log('> Init TL...');
this.$.gridTLImgViewer.addEventListener('ImageViewerLoaded', function () { this.setupSync(this.$.gridTLImgViewer); }.bind(this));
console.log('>> Init TR...');
this.$.gridTRImgViewer.addEventListener('ImageViewerLoaded', function () { this.setupSync(this.$.gridTRImgViewer); }.bind(this));
console.log('>>> Init BL...');
this.$.gridBLImgViewer.addEventListener('ImageViewerLoaded', function () { this.setupSync(this.$.gridBLImgViewer); }.bind(this));
console.log('>>>> Init BR...');
this.$.gridBRImgViewer.addEventListener('ImageViewerLoaded', function () { this.setupSync(this.$.gridBRImgViewer); }.bind(this));
}
}
window.customElements.define(Quadimageview.is, Quadimageview);
</script>
И мой компонент разбивается на 'addEventListener' с ошибкой, в которой говорится, что "Невозможно добавить свойство" addEventListener "из неопределенного. Так что похоже на «это. $.» не правильный звонок. Любые намеки на то, что я настраиваю неправильно? Спасибо!