मैं सामान्य वेब घटकों को बनाने का प्रयास कर रहा हूं जो JSON ऑब्जेक्ट संग्रह, जैसे पेड़ दृश्य और बहु-सूची दृश्य (दो सूचियों के बीच चलती वस्तुओं) प्रस्तुत करते हैं। मैं लोहे की सूची द्वारा उपयोग किए गए पैटर्न की प्रतिलिपि बनाना चाहता हूं जहां व्यक्तिगत आइटम प्रस्तुति वाला टेम्पलेट पुन: उपयोग के लिए घटक में पारित किया जाता है।पॉलिमर 2 गतिशील रूप से विलय टेम्पलेट्स
उदाहरण के लिए, इस वेब घटक टेम्पलेट दिया:
<dom-module id="intworkspace-tree">
<template>
<style include="iron-flex iron-flex-alignment">
paper-icon-item {
--paper-item-min-height: var(--intworkspace-tree-margin,30px);
--paper-item-icon-width : var(--intworkspace-tree-margin,30px);
}
paper-icon-item:focus::before,
paper-icon-item:focus::after {
color: inherit;
opacity: 0;
}
.node {
margin-left: var(--intworkspace-tree-margin,30px);;
}
</style>
<slot id="labelView"></slot>
<template id="nodeView">
<div class="layout vertical">
<paper-icon-item on-tap="nodeSelected">
<iron-icon icon="expand-less" slot="item-icon" hidden$="[[!hasNodes(node)]]"></iron-icon>
<!-- label goes here-->
</paper-icon-item>
<iron-collapse class="node" opened hidden$="[[!hasNodes(node)]]">
<intworkspace-tree tree="[[node.nodes]]" embedded></intworkspace-tree>
</iron-collapse>
</div>
</template>
</template>
\t ...
</dom-module>
और इस प्रयोग:
<intworkspace-tree tree="{{testTree}}">
<template><paper-item-body>[[node.name]]</paper-item-body> </template>
</intworkspace-tree>
, टेम्पलेट्स लोड करने के लिए Polymer.Templatize.templatize एपीआई का उपयोग/डाक टिकट नया उदाहरण बना, और उन्हें एक साथ संलग्न करें और उन्हें जोड़ने के लिए डोम एपीआई का उपयोग: अब तक मैं टेम्पलेट्स के संयोजन के दो तरीके की पहचान की है वेब घटक की छाया डोम के लिए।
टेम्पलेट सामग्री तक पहुंचें, उन्हें एक साथ मिलाएं, एक नया टेम्पलेट बनाएं और आयात करें, और फिर आवश्यकतानुसार इसे क्लोन करें।
बहुत परेशानी के बाद मैं # 1 को सफलतापूर्वक कार्यान्वित करने में सक्षम था लेकिन # 2 नहीं और यह मेरे प्रश्न के लिए प्रेरणा है। # 2 मेरे लिए अधिक आकर्षक है क्योंकि मेरे परिणामस्वरूप मुद्रित उदाहरणों को विलय करने के बजाए टेम्पलेट्स को एक बार मर्ज करना मेरे लिए आसान है और यह दृष्टिकोण एकमात्र तरीका है जो मैं नेस्टेड टेम्पलेट्स जैसे डोम-दोहराना का पुन: उपयोग कर सकता हूं।
मेरा मुख्य बाधा यह है कि एक बार पॉलिमर या शायद इसकी पॉलीफिल लोड हो जाती है तो टेम्पलेट अपारदर्शी हो जाते हैं और केवल पॉलिमर टेम्पलेटैट कार्यक्षमता द्वारा इसका उपयोग किया जा सकता है। उदाहरण के लिए, इस कोड को किसी भी पॉलिमर के आयात के बिना ठीक काम करता है:
<template>
<div>Template Contents</div>
</template>
<div>
Template Test
</div>
<script>
let template = document.querySelector("template");
let clone = document.importNode(template.content,true);
document.querySelector("div").appendChild(clone);
</script>
पॉलिमर के बाहर template.content DOMFragment बच्चे हैं और innerHTML निर्धारित है। हालांकि एक बार पॉलिमर का उपयोग किया जाता है टेम्पलेट। कॉन्टेंट में कोई बच्चा नहीं है और आंतरिक HTML खाली है। यह मैं हूँ कि एक साथ मिश्रण उपलब्ध टेम्पलेट एक नया खाका बनाने के लिए डोम एपीआई का उपयोग करने से रोकता है, यानी
let newTemplate = document.createElement("template");
newTemplate.content = ... // combine #labelView > template.content with #nodeView.content
let nodeView = document.importNode(newTemplate.content,true);
nodeView.tree=...
। पॉलिमर के साथ रनटाइम पर टेम्पलेट्स को गतिशील रूप से बनाने/मर्ज करने का कोई और तरीका है? फिर मेरी मुख्य प्रेरणा यह है कि मैं अपने सभी कार्यक्षमताओं को दोबारा लागू किए बिना टेम्पलेट में घोंसला वाले डोम-आई और डोम-दोहराने वाले वेब घटकों का पुन: उपयोग करना चाहता हूं।