2014-06-11 13 views
7

के साथ कई तत्वों का विस्तार कैसे करें मुझे पता है कि यह प्रश्न multiple inheritance/composition पर है। हालांकि, ऐसा लगता है कि इस सवाल के बारे में अधिक जानकारी है कि अन्य तत्वों में कई मौजूदा तत्वों से कार्यक्षमता का पुन: उपयोग कैसे करें। और जाहिर है, इसके लिए समाधान mixins हैं।पॉलिमर

मैं जानना चाहता हूं कि वास्तव में मैं उन तत्वों को वास्तव में "सजाने" कैसे कर सकता हूं, बिना वास्तव में उनसे कार्यक्षमता उधार लेता हूं। हम जानते हैं कि यह extends संपत्ति है जो पॉलिमर के साथ मौजूदा तत्व को विस्तारित करने के लिए उपयोग कर सकती है।

तो एक सामान्य <button>mega-button जैसा व्यवहार <button is="mega-button"> को जोड़ने के समान सरल है और इसके लिए एक घटक लिखें। लेकिन यह पता चला है कि extend एकाधिक तत्वों के लिए संभव नहीं है। तो extends="foo bar" की तरह कुछ काम नहीं करता है। क्या होगा यदि मैं एक वेब घटक बनाना चाहता हूं, जिसे वास्तव में विभिन्न तत्वों पर लागू किया जा सकता है?

उदाहरण के लिए, मैं नहीं चाहता कि केवल mega-button साथ <button> तत्वों का विस्तार करने के लिए एक <a> तत्व चाहते हैं, लेकिन शायद यह भी इतना है कि यह की तरह लग रहा है और एक mega-button भी तरह बर्ताव करता है?

मिश्रण दृष्टिकोण वास्तव में यहां सहायता नहीं करता है (जहां तक ​​मुझे यह मिलता है), क्योंकि वे कुछ और नहीं करते हैं, फिर विभिन्न वेब घटकों के लिए साझा तर्क प्रदान करते हैं। इसका मतलब है, आप एक मिश्रण से कई घटक बनाते हैं, और तर्क (एक मिश्रण में पैक) का पुन: उपयोग करते हैं।

मैं क्या जरूरत है एक वेब घटक है कि कई तत्वों के लिए लागू किया जा सकता बनाने के लिए एक तरीका है।

कोई विचार यह कैसे हल करें?

अद्यतन

एडी कुछ दृष्टिकोण के साथ उत्तर दिया कि उपयोग के मामले को संभालने के लिए। यहाँ एक अनुवर्ती प्रश्न एक दृष्टिकोण

How to find out what element is going to be extended, while registering my own in Polymer

और Is it possible to share mixins across web components (and imports) in Polymer?

अद्यतन 2

पर एक दूसरे पर आधारित है मैं एक लेख लिखा और विरासत के बारे में अपने अनुभवों और सीखी निष्कर्ष निकाला गया है और बहुलक के साथ संरचना: http://pascalprecht.github.io/2014/07/14/inheritance-and-composition-with-polymer/

+0

मुझे यहां एक और दृष्टिकोण मिला: https://github.com/mvaldetaro/twbs-buttons। इस प्रोजेक्ट का लेखक एक 'टैग' विशेषता प्रकाशित करके एपीआई प्रदान करता है जो आपको वास्तविक HTML टैग निर्दिष्ट करने देता है जिसका उपयोग किया जाना चाहिए। वेब घटकों के कार्यान्वयन में, आप देख सकते हैं कि वह अलग-अलग टैग नामों की जांच करता है और तदनुसार विभिन्न टेम्पलेट सामग्री का उपयोग करता है। निश्चित रूप से * नहीं * मेरी राय में जाने का तरीका। – PascalPrecht

उत्तर

2

यदि आपको केवल एक ही आयात करने की आवश्यकता है जिसमें suppo है कई तत्वों पर लागू होने के लिए आरटी, आपके तत्व में कई तत्व परिभाषाएं शामिल हो सकती हैं जो आपके सजाने वाले तत्वों के बीच कार्यक्षमता साझा करने के लिए Polymer.mixin का लाभ ले सकती हैं या नहीं।

तो pascal-decorator.html<pascal-span> और <pascal-button>, जो दोनों के किसी वस्तु से mixin तर्क pascal-decorator.html में परिभाषित के लिए पॉलिमर तत्व परिभाषाएँ हो सकता है। इसके बाद आप <button is="pascal-button"> और <button is="pascal-span"> कर सकते हैं, जबकि ऐसा करने के लिए तर्क एक ही आयात के अंदर रहता है।

विकल्प (यदि आप सख्ती से यह सब एक कस्टम तत्व में करना चाहते हैं, जो आईएमओ, यह कम साफ करता है) कुछ ऐसा करना है जैसे तत्व के विस्तार के प्रकार की जांच करना, जो या तो तरीके से किया जा सकता है आप linked to या अपने तत्व पंजीकरण प्रक्रिया के हिस्से के रूप में जांच कर।

आम तौर पर, मैं व्यक्तिगत रूप से यह समझना पसंद करता हूं कि सजाए जाने वाले तत्वों के बीच मुझे कौन सा तर्क साझा करने की आवश्यकता हो सकती है, उस तत्व को उस तत्व में अलग कर सकते हैं और फिर उन्हें समर्पित तत्वों में आयात कर सकते हैं जिनके पास टैग के बारे में ज्ञान है (उदाहरण के लिए <addy-button> , <addy-video> आदि)।

+0

Addy, आपके विस्तृत उत्तर के लिए धन्यवाद। जबकि मैं उस परिदृश्य को संभालने के विभिन्न तरीकों को समझता हूं, मुझे अभी भी यकीन नहीं है कि क्या कुछ मामलों में यह वही है। मुझे लगता है कि twbs-बटन एक आदर्श उदाहरण हैं। आपके पास एंकर टैग, या आपके एप्लिकेशन में बटन तत्व हो सकते हैं जो एक ट्विटर बटन की तरह दिखते हैं (और शायद व्यवहार करते हैं)। तो आप क्या करना चाहते हैं तो sth करने में सक्षम है। जैसे <<बटन है = "twbs-button"> 'या' '। क्या यह वास्तव में इन अलग-अलग मामलों के लिए तत्व बनाने का पसंदीदा तरीका है? 'twbs-button' और' twbs-link'? – PascalPrecht

+0

इसके आसपास के सर्वोत्तम अभ्यास अभी भी विकसित हो रहे हैं :) यह जानना उपयोगी होगा कि क्या आप प्राप्त करने की कोशिश कर रहे हैं (आप इन तत्वों को किस सजाने के लिए प्रयास कर रहे हैं?) का एक ठोस उदाहरण है। यदि सामान्य एक्सटेंशन उपयोग-मामले का समर्थन करने के लिए समान तत्व का उपयोग करके व्यवहार (उदाहरण के लिए बातचीत/क्लिक/स्पर्श) का विस्तार करना चाहते हैं तो मामले को जांचने की आवश्यकता के बिना काम करना चाहिए। दृश्य हैं जहां आगे की देखभाल की जानी चाहिए और यही वह जगह है जहां मैं विशिष्ट तत्वों की आवश्यकता महसूस करता हूं। – addyo

+0

ठीक है, वास्तव में मेरे पास यहां वर्णित सटीक परिदृश्य है। मैं आयनिक ढांचे के लिए वेब घटकों का निर्माण करने की कोशिश कर रहा हूं। और एक बटन घटक है (बेशक, यह सिर्फ एक सीएसएस वर्ग है), जिसमें थीमिंग सपोर्ट इत्यादि है। इसलिए असल में वर्तमान में यह सीएसएस के बारे में है जहां बिल्कुल कस्टम तत्व की आवश्यकता नहीं है, लेकिन ऐसी स्थितियां हो सकती हैं जहां मुझे जेएस तर्क की आवश्यकता हो घटक का उपयोग '