2016-08-23 13 views
11

में बाइंडिंग के साथ टेक्स्ट रैपिंग तत्व मैंने पॉलिमर के साथ एक कस्टम वेब घटक बनाया है, जो पाठ को लपेटता है और इसे थोड़ा बदल देता है (अवधारणा के इस सबूत में अपरकेस में बदल रहा है)।पॉलिमर 1.0

तत्व स्वयं स्थिर सामग्री के साथ ठीक काम करता है। हालांकि, जब सामग्री गतिशील रूप से बाध्य होती है, तो घटक सामग्री को दिखाने में विफल रहता है।

उदाहरण के लिए:

<my-wrapper>Hello, World!</my-wrapper> <!-- Works --> 
<my-wrapper>[[someText]]</my-wrapper> <!-- Doesn't work --> 

वर्तमान में मैं observeNodes का उपयोग कर रहा है, जो प्रारंभिक पाठ बदलने को गति प्रदान करने में सफल हुआ है, लेकिन उप-अनुक्रमिक परिवर्तन को गति प्रदान करने में विफल रहता है।

मेरे वर्तमान प्रोटोटाइप के रूप में परिभाषित किया गया है:

<dom-module id="my-wrapper"> 
    <template> 
    <span id="placeholder"></span> 
    </template> 
    <script> 
    Polymer({ 
     is: 'my-wrapper', 
     ready: function() { 
     var self = this; 
     Polymer.dom(Polymer.dom(this)).observeNodes(function(info) { 
      self.$.placeholder.textContent = info.target.textContent.toUpperCase(); 
     }); 
     /*var mutationObserver = new MutationObserver(function(e) { 
      console.log(e); 
     }); 
     mutationObserver.observe(this.root, {characterData: true, childList: true});*/ 
     }, 
    }); 
    </script> 
</dom-module> 

और ऊपर उल्लिखित समस्या के लिए एक काम कर JSBin यहां पाया जा सकता: http://jsbin.com/jumewuzuho/1/edit?html,console,output

(प्रकाश डीओएम) सामग्री के परिवर्तन को कैप्चर करने के तरीके पर कोई सुझाव, ताकि मैं पाठ को फिर से बदल सकूं?

जैसा कि आप कोड के टिप्पणी ब्लॉक में देख सकते हैं, मैंने पहले से ही MutationObserver का उपयोग करने का प्रयास किया है, लेकिन एक कामकाजी प्रोटोटाइप बनाने में विफल रहा है। मेरा अनुमान है कि मैंने सही नोड (this.root मेरे मामले में) का उपयोग नहीं किया था।

+0

क्या आपको इसका समाधान मिला है? मैं फिलहाल एक टेक्स्ट रैपर भी लिख रहा हूं, लेकिन अब तक मेरे लिए कोई समाधान नहीं हुआ है। नौकरी करने वाली एकमात्र चीज टेक्स्ट को एक विशेषता के रूप में पास कर रही है (जो मेरी राय में साफ नहीं है) – Yorrd

+0

@Yorrd: नहीं, मुझे अभी तक समाधान नहीं मिला है। मैंने 'टेम्पलेटर' व्यवहार के साथ 'टेम्पलेट' टैग के अंदर तत्व की सामग्री डालने का भी प्रयास किया है, लेकिन किसी भी उपयोगी परिणाम देने में विफल रहा है। – alesc

उत्तर

1

मुझे नहीं लगता कि ObserveNodes (या MutationObserver) सबसे अच्छा तरीका यह दृष्टिकोण हैं है। ObserveNodes ट्रैक करता है जब नोड आपके तत्व से जोड़े और हटा दिए जाते हैं।

आपके मामले में, डोम नोड्स नहीं जोड़े या हटाए जा रहे हैं, यह केवल उस तत्व का आंतरिक पाठ है जो बदल रहा है। उन परिवर्तनों को ObserveNodes द्वारा उठाया नहीं जाता है।

मैं, एक और दृष्टिकोण है, जो मेरी राय में मामूली अधिक काम करने के बहुलक रास्ता के साथ गठबंधन किया है की सिफारिश करेंगे content टैग का उपयोग:,

अपने स्थानीय डोम के साथ एक तत्व के प्रकाश डोम की संरचना का समर्थन करने के पॉलिमर सामग्री तत्व का समर्थन करता है। content तत्व एक प्रविष्टि बिंदु है जिस पर एक तत्व के प्रकाश डोम

मैं एक सम्मिलन बिंदु बनाने और उसके बाद छाया डोम के माध्यम से यह शैली सामग्री टैग का प्रयोग करेंगे अपने स्थानीय डोम के साथ संयुक्त है प्रदान करता है (पाठ बदलने: अपरकेस):

<dom-module id="my-wrapper"> 
    <template> 
    <style> 
     :host { 
     text-transform: uppercase; 
     } 
    </style> 
    <content></content> 
    </template> 
    <script> 
    Polymer({ 
     is: 'my-wrapper' 
    }); 
    </script> 
</dom-module> 
+0

आपके इनपुट के लिए धन्यवाद, लेकिन मैं पाठ परिवर्तन का पता लगाने के लिए एक सामान्य समाधान की तलाश में हूं, क्योंकि मैं प्रश्न में प्रस्तुत किए गए इस तरह के सरल परिवर्तन नहीं करूँगा। मैं "अधिक देखें" और "कम देखें" टॉगल लिंक के साथ एक टेक्स्ट शॉर्टनर बनाने का प्रयास करूंगा। वर्तमान में मैं एक विशेषता को पाठ बाध्य कर रहा हूं और यह अभी के लिए काम करता है। लेकिन मैं अभी भी प्रस्तावित समस्या का हल ढूंढ रहा हूं। – alesc

संबंधित मुद्दे