बहुत पहले नहीं, पहले से ही व्यावहारिक रूप से लिखित परियोजनाओं में से एक में,
वेब घटकों की समानता का उपयोग करने की आवश्यकता थी। मैं आपको बताना चाहता हूं कि क्या हुआ, मैं संक्षेप में कोशिश करूंगा:
उद्देश्य:
HTML लेआउट (नए शब्दार्थ) में घटक दृष्टिकोण का उपयोग शुरू करें, अर्थात् वेब घटक।घटक से मेरा मतलब है - "पुन: उपयोग और तैनाती के लिए डिज़ाइन किया गया प्रोग्राम कोड का एक स्वतंत्र मॉड्यूल।" उदाहरण के लिए, किसी अन्य प्रोजेक्ट में।
यहां मैं एक छोटा सा विषयांतर बनाना चाहता हूं और स्पष्ट करना चाहता हूं कि हम घटकों के बारे में बात कर रहे हैं, विगेट्स नहीं
(किसी एप्लिकेशन की कार्यात्मक रूप से अलग इकाइयां जो किसी विशिष्ट एप्लिकेशन की प्रस्तुति, तर्क और / या डेटा को जोड़ती हैं - जावास्क्रिप्ट + एचटीएमएल + सीएसएस) ।
मेरी राय में अंतर यह है कि घटक किसी विशिष्ट डेटा मॉडल या किसी विशेष एप्लिकेशन के तर्क से बंधा नहीं है - और आप इसे आसानी से किसी अन्य एप्लिकेशन में स्थानांतरित कर सकते हैं। एक विजेट एक विशेष एप्लिकेशन की एक इकाई है जो तर्क या डेटा द्वारा बारीकी से जुड़ा हुआ है, और आप इसे विजेट में आंतरिक परिवर्तनों के बिना इसे कहीं स्थानांतरित करने में सफल नहीं हुए हैं।
एक घटक के एक उदाहरण के रूप में, मैं आपको एक चयन, accordion या टैब, और विजेट - एक स्थिति पट्टी या एक चैट संदेश प्रदर्शन विंडो दे सकता हूं।
क्यों:
HTML सिंटैक्स के विस्तार की मदद से पुन: प्रयोज्य कोड और लेआउट सुविधा।जैसा कि डॉक एक प्रसिद्ध ढांचे से कहता है:
“निर्देश केवल कोणीय में उपलब्ध एक अद्वितीय और शक्तिशाली विशेषता है। निर्देश आपको नए HTML सिंटैक्स का आविष्कार करने देता है, जो आपके आवेदन के लिए विशिष्ट है। "
- मैं यह दिखाना चाहता हूं कि यह एंगुलरज के बिना संभव है।
और क्योंकि मैं एक
विजेट-ओरिएंटेड आर्किटेक्चर के साथ या उन टेम्प्लेटिंग इंजनों के साथ एक घटक दृष्टिकोण (एंगुलरज डायरेक्टिव्स का एनालॉग) का उपयोग करना चाहता हूं, जिनके साथ काम करना मुझे सुविधाजनक लगता है।
सामान्य तौर पर, एप्लिकेशन आर्किटेक्चर या फ्रेमवर्क का उपयोग करें जो किसी विशेष मामले में मेरे लिए सुविधाजनक है।
और नीचे दिया गया वर्णन एमवी * फ्रेमवर्क के माध्यम से नहीं है, और मैंने इसके बारे में कभी नहीं सोचा था।कैसे करें:
सरलतम मामले में, वेब घटक की समानता को दो मुख्य भागों से मिलकर माना जा सकता है: एक टेम्पलेट और एक स्क्रिप्ट।
डेकोरेटर (सीएसएस) - अभी के लिए, हम संभव में अतिरिक्त तर्क के कारण इस पर विचार नहीं करेंगे। हां, और पहले से मौजूद किसी चीज के साथ तुलना करना बेहतर है, इसलिए बस थोड़ा कोणीयज स्पर्श करें।
जावास्क्रिप्ट फ़ंक्शन को कॉल करना, मुझे लगता है, किसी के लिए भी कठिनाइयों का कारण नहीं होगा, इसलिए हमने HTML के लिए टेम्पलेट्स के कार्यान्वयन पर ध्यान केंद्रित किया।हाल ही में प्रकाशित
लेख क्लाइंट-साइड टेंपलेटिंग के लिए दो दृष्टिकोणों की रूपरेखा तैयार करता है।
दृष्टिकोण 1 - लंबे समय से इस्तेमाल किया गया है - एक "वॉयसओवर" डोम का निर्माण, इसके बाद के छिपाव के साथ।
<div id="mytemplate" hidden> <img src="logo.png"> <div class="comment"></div> </div>
लाभ / नुकसान:+ ब्राउज़र डोम का उपयोग करना - ब्राउज़र जानता है कि यह क्या है और इसके साथ काम करने में सक्षम है। यदि आवश्यक हो, तो हम आसानी से इसे क्लोन कर सकते हैं।
+ अतिरिक्त कुछ भी प्रदर्शित नहीं होता है - छिपी टेम्पलेट ब्लॉक को दिखाने से रोकता है।
- निष्क्रिय - उदाहरण के लिए, भले ही हमारी सामग्री छिपी हो, लेकिन छवि को डाउनलोड करने के लिए एक नेटवर्क अनुरोध भेजा जाएगा और निष्पादित किया जाएगा।
- डिजाइन और थीमिंग - मुख्य पृष्ठ वेब घटकों के लिए सीएसएस मार्कअप को भी लोड करना चाहिए। यह दृष्टिकोण को नाजुक बनाता है क्योंकि इस बात की कोई गारंटी नहीं है कि हम नाम संघर्ष में नहीं चलेंगे।
दृष्टिकोण 2 - अधिभार
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
-
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
-
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
-
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
-
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component); html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .
.
2008 , . , handlebars.js mustache.js.
<script id="mytemplate" type="text/x-handlebars-template"> <img src="logo.png"> <div class="comment"></div> </script>
/:
+ – , “display: none” .
+ – , .. JS, "text/javascript".
- – innerHtml. XSS .
:
1 – , DOM, ( getElementByID querySelector) . – . 2 – - JavaScript DOM addEventListener
- , .
- DOM . DOM – DOM. .
.. DOM , , , (, querySelectorAll(“component.name”) ).
( ) html , . . DOM innerHTML , DOM DOM.
:
javascript
component = { name: ..., template: ..., script: function (element, attrs) {….}, onattach: function (element) {….}, instantiate: true/false }
:
name – , html template – html (). script – ( element – , attrs – ). DOM onattach – DOM instantiate – . (element.component).
TagBuilder.register(component);
html ,
<accordion> <accordion-page header=”Header 1”> … </accordion-page> <accordion-page class="open" header=”Header 2”> … </accordion-page> ... </accordion>
w-component=”accordion” DOM( ).
DOM
TagBuilder.apply('component css selector or components wrapper');
html , TagBuilder.compile(string, options); , TagBuilder.apply('component css selector or components wrapper'); . (w-component=”name”) .