我有一组聚合物组件是另一个组件的子类。我想根据子类的模板填充超类的模板。 (见here别人无解寻找一个解决类似的问题,很遗憾。)的使用看起来是这样的:子类聚合物元素填充基类插入点
<!-- control.html -->
<media-tabs tabs-title="Alternative input">
<template>
<media-blackout></media-blackout>
<media-slates></media-slates>
<media-playlists></media-playlists>
<media-queue></media-queue>
</template>
</media-tabs>
<!-- media-tabs.html -->
<paper-card heading="[[tabsTitle]]" class="fill-h fill-v">
<div class="card-content">
<paper-tabs id="tabs" selected="{{selectedIndex}}" selectable>
</paper-tabs>
<iron-pages id="content" selected="{{selectedIndex}}">
</iron-pages>
</div>
</paper-card>
// media-tabs.js
ready() {
super.ready();
this.selectedIndex = 0;
const template = this.querySelector('template');
const instance = this._stampTemplate(template);
const tabs = Array.from(instance.children);
tabs.forEach((elm) => {
const content = elm.constructor.template.content;
this.$.tabs.appendChild(content.querySelector('#title'));
this.$.content.appendChild(content.querySelector('#content'));
});
}
<!-- media-tab.html -->
<paper-tab id="title"></paper-tab>
<div id="content"></div>
<!-- media-blackout.html -->
<span id="title">Blackout</span>
<div id="content">
<p>Lorem ipsum dolor sit amet</p>
</div>
<!-- repeat above for media-playlists, media-queue, and media-slates -->
// media-blackout.js -- is a subclass of media-tab
static get template() {
if (!superTemplate) {
const thisTemplate = Polymer.DomModule.import(this.is, 'template');
superTemplate = MediaTab.template.cloneNode(true);
const title = thisTemplate.content.querySelector('#title').textContent;
const content = thisTemplate.content.querySelector('#content');
const children = Array.from(content.children);
superTemplate.content.querySelector('#title').innerHTML = title;
children.forEach((child) => {
superTemplate.content.querySelector('#content').appendChild(child);
});
}
return superTemplate;
}
// repeat above for media-playlists, media-queue, and media-slates
这个设置工作。然而,在media-tab子类中,template()
获取方为相同,我想找到一种将该逻辑移入超类的方法,而超类中的代码不需要知道子类实现细节。
我试图为超类需要拉的两个字段(例如const title = this.templateTitleElement.textContent;
)创建getter,但是我的实现要么以某种方式戳元素的template
属性(导致堆栈溢出),要么尝试在可用之前访问元素(例如,return this.$.title;
)。