私は、別のコンポーネントのサブクラスであるポリマーコンポーネントのセットを持っています。私は、サブクラスのテンプレートに基づいてスーパークラスのテンプレートを設定したいと思います。サブクラス基本クラス挿入ポイントを埋めるポリマー要素
<!-- 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
:(。残念ながらなし溶液で、同様の問題への解決策を探して他の誰かのためhereを参照してください)使い方は次のようになりますこの設定は機能します。しかし、template()
ゲッターはmedia-tabサブクラスでと同じです。サブクラスの実装の詳細を知る必要のあるスーパークラスのコードを使わずに、そのロジックをスーパークラスに移動する方法を探したいと思います。
const title = this.templateTitleElement.textContent;
)からプルする必要があるだろう二つのフィールドのgetterを作成しようとしました
、しかし私の実装はいくつかの方法(スタックオーバーフローをもたらす)内の要素のtemplate
プロパティを突くか、あるいはしようどちらか利用可能になる前に要素にアクセスしてください(例:return this.$.title;
)。