2009-08-31 15 views
11

आप आमतौर पर जावास्क्रिप्ट में किस यूआई पैटर्न का उपयोग करते हैं?जावास्क्रिप्ट में यूआई पैटर्न

यूआई पैटर्न द्वारा मेरा मतलब है कि यूआई बनाने और प्रबंधित करने के लिए सर्वोत्तम प्रथाओं का उपयोग किया जाना चाहिए, जावास्क्रिप्ट से उत्पन्न/प्रबंधित (jQuery या YUI जैसे पुस्तकालयों के अलावा)।

उदाहरण के लिए, यदि आप .NET दुनिया से आए हैं तो आप एमवीसी (मॉडल-व्यू-कंट्रोलर) पैटर्न परिवार से परिचित हैं। WinForms और ASP.NET की दुनिया में आप मॉडल-व्यू-प्रेजेंटर से मिलेंगे। डब्ल्यूपीएफ में सबसे अधिक संभावना है कि आपको एमवीवीएम (मॉडल-व्यू-व्यू मॉडेल) दृष्टिकोण मिलेगा।

और जावास्क्रिप्ट के बारे में क्या?

+0

कोई कारण नहीं है कि एमवी [सी | पी] लागू नहीं होना चाहिए - इसकी सुंदर भाषा स्वतंत्र है। – Chii

उत्तर

7

पैटर्न आमतौर पर भाषा-अज्ञेयवादी होते हैं। यदि किसी पैटर्न के मूल्य हैं, तो कुछ किनारे के मामलों को छोड़कर इसका मूल्य होगा चाहे आप किस भाषा या तकनीक का उपयोग कर रहे हों। एमवीसी ले लो। मॉडल को नियंत्रक से देखने से अलग करने की अवधारणा इस बात पर ध्यान दिए बिना कि मॉडल को आरडीबीएमएस या किसी अन्य तकनीक के साथ कार्यान्वित किया गया है, चाहे दृश्य एचटीएमएल या स्विंग या एक्स

जहां आप कुछ पैटर्न लागू करते हैं एक तकनीक की तुलना में एक तकनीक में, आमतौर पर इसका मतलब यह है कि प्रौद्योगिकी के डेवलपर्स के पास एक विशेष दृष्टिकोण था कि उन्होंने दूसरों की तुलना में अधिक पूर्ण समर्थन किया।

जावास्क्रिप्ट स्वयं आपके लिए कोई विशेष पैटर्न लागू नहीं करता है। कुछ जावास्क्रिप्ट ढांचे, जैसे यूयूआई या डोजो या ग्लो आपको एक दिशा से अधिक दिशा में ले जाएंगे।

दिन के अंत में, जिस समस्या को आप हल कर रहे हैं, संसाधनों और अनुभव को देखें, और समझने वाले पैटर्न का पालन करें।

+0

उत्तर के लिए धन्यवाद, टी.जे.! मैंने इसे पहले एक जवाब के रूप में चिह्नित नहीं किया था, क्योंकि मुझे संदेह था। मैंने सोचा कि बाकी की तुलना में कुछ और लोकप्रिय होना चाहिए। लेकिन ऐसा लगता है कि जावास्क्रिप्ट वर्ल्ड में आप या तो पुस्तकालयों का उपयोग करते हैं या अन्य प्लेटफॉर्म (एमवीएक्स) से कुछ अपनाने के लिए, जो आपकी समस्या को बेहतर बनाता है। 200 9 में – Anvaka

1

जैसा कि मुझे पता है कि अभी तक जावास्क्रिप्ट के लिए कोई विशिष्ट पैटर्न नहीं हैं। लेकिन मुझे लगता है कि विगेट्स (घटक) दृष्टिकोण जैसे कुछ की संभावना है। चूंकि मुख्य रूप से हम अपने एचटीएमएल कोड को सशक्त बनाने के लिए जावास्क्रिप्ट का उपयोग करते हैं। यह तर्कसंगत है कि हमें अपने प्रत्येक जावास्क्रिप्ट ऑब्जेक्ट को HTML टैग से कनेक्ट करना चाहिए। तो यहां हमारे पास मॉडल (जेएसओब्जेक्ट) + व्यू (एचटीएमएल प्रस्तुतिकरण) जैसे कुछ है। एमवीसी प्राप्त करने के लिए हमें नियंत्रकों की आवश्यकता है और हमारे पास इसके लिए कार्यक्रम हैं। इस मामले में हम आसानी से extensibel घटक incapsulated होगा।

उदाहरण के लिए

:

// this is a part of some FormValid.js 
<script> 
function FormValid(){ 

} 

FormValid.prototype.validate=function(){...} 
</script> 

//this is our HTML 
<form id="form1"...onsubmit="this.jsObject.validate();"> 
</form> 

<script> 
//all the following stuff could be solved in one line, but you need to create some helper. Like Components.Attach("FormValid").to("form1"); 
var newObj=new FormValid() 
var form=document.getElementById("form1"); 
from.jsObject=newObj; 
newObj.htmlObj=form; 
</script> 

इसके अलावा, मैं Zparser तरह टेम्पलेट इंजन का उपयोग कर देख सकते हैं और मॉडल को अलग करने की एक विचार है। मैं इसके लिए जेएस लाइब्रेरी विकसित कर रहा हूं, इसलिए मैं अभी इस प्रश्न में हूं।

हमारे पास के साथ मूल वस्तु है विधि देखें। हमारे सभी वर्गों में यह अंत में एक प्रोटोटाइप की तरह है। इस विधि को टेम्पलेट्स कक्षा की संपत्ति और कुछ टेम्पलेट्स पार्सर का उपयोग करके हमारे मॉडल पर HTML बेसिंग उत्पन्न करता है। यह HTML HTMLObj नोड में डाला गया है ताकि हमारे ऑब्जेक्ट का दृश्य अपडेट हो। यह मूल रूप से एक विचार है और हमारे कोड हो जाता है:

// this is a part of some FormValid.js 
<script> 
function FormValid(){ 

} 
Components.extendCore(FormValid); 

FormValid.prototype.validate=function(){...} 
</script> 

FormValid.prototype.templates={ 
    main:'<form class="form1"...onsubmit="this.jsObject.validate();">...</form>' 
} 

//this is our HTML 
<div id="form1"></div> 
<script> 
Components.Attach("FormValid").to("form1"); 
</script> 

मुझे अभी भी लगता पिछले एक इनलाइन <script> होना चाहिए और यह प्रतिनिधित्व के साथ तर्क मिश्रण नहीं है, क्योंकि इस घटक है - ठोस टुकड़ा। इसका कोई दूसरा अर्थ नहीं है। वास्तव में यह आवेदन का एक हिस्सा होना चाहिए। घटक के एचटीएमएल की तरह कुछ (लास में एक उदाहरण div है) को परिभाषित किया जाना चाहिए और घटक के साथ लपेटा जाना चाहिए जो स्वचालित रूप से स्क्रिप्ट और आईडी जोड़ देगा।

अब। मैंने आपको 2 उदाहरण दिखाए और मैं समझाऊंगा कि दूसरा क्यों विशिष्ट है।
सभी सामान अभिगम्यता और प्रदर्शन (और मेमोरी लीक) में है। यदि आप अक्सर सभी एचटीएमएल घटक को रीफ्रेश करेंगे - यह झपकी देगा, आपको सभी गतिशील घटनाओं को वापस सेट करने और मेमोरी लीक के लिए सब कुछ जांचने की आवश्यकता होगी। लेकिन जेएस असफल होने पर मुख्य समस्या - आपका आवेदन कुछ भी नहीं दिखाएगा।

तो मैं उन दोनों के बीच चुनाव करना पसंद करता हूं :) और उनके स्थानों पर सबकुछ उपयोग करना पसंद करता हूं।

+0

विजेट/घटक पहले ही यूयूआई, jQuery, एक्सटीजेएस, दोजो इत्यादि से ढके हुए हैं और इस तरह के पुस्तकालयों के अलावा "प्रश्न" के दृष्टिकोण के बारे में सवाल पूछे गए थे। –

+0

मैं तुम्हारा बिंदु Djko देखता हूँ! कुछ कारणों से मुझे इस तकनीक में आत्मविश्वास महसूस नहीं होता है। यह मुझे गंदे एएसपीएक्स + कोड के पीछे याद दिलाता है, लेकिन इस मामले में यह कोड-बैक जैसा है सीधे एएसपीएक्स पेज में लिखा गया है (ठीक है, मान लें कि मैं के बारे में भूल गया)। यूआई एक ही समय में दृश्य और नियंत्रक की तरह कार्य करता है। और मॉडल को यूआई में गतिशील परिवर्तन करने के लिए बहुत कुछ पता होना चाहिए (उदाहरण के लिए इसे कक्षा में बदलना) ... शायद आप इस विचार के प्रदर्शन के साथ कुछ अच्छे असली दुनिया के उदाहरण दे सकते हैं? – Anvaka

+0

मैं आपकी चिंताओं को समझता हूं, लेकिन क्लाइंट साइड डेवलपमेंट के लिए जावास्क्रिप्ट फ़ंक्शन यूआई के साथ काम करना है। तो इसे इसके बारे में बहुत कुछ पता होना चाहिए और इसके साथ गहराई से बातचीत करना चाहिए। दूसरी ओर, मैं आपको उदाहरण दिखा सकता हूं जहां दृश्य और मॉडल को अलग करना संभव है। अद्यतन उत्तर देखें। –

4

मैं रॉस हार्मिस & डस्टिन डायज की पुस्तक, Pro JavaScript Design Patterns, निश्चित रूप से इस विषय पर सबसे अच्छा संसाधन, और निश्चित रूप से पढ़ने के लायक की सिफारिश करना चाहता हूं।

A List Apart के नवीनतम अंक में JavaScript MVC पर भी एक बहुत ही रोचक लेख है।

+0

+1, लेकिन शायद अब और सत्य नहीं है। यह पुस्तक 2007 से है, निस्संदेह एक अद्यतन की जरूरत में बुरी तरह से। शायद इस उत्तर को अपडेट करना चाहते हैं। मैंने पढ़ा और आनंद लिया [रखरखाव जावास्क्रिप्ट] (http://amzn.com/1449327680), जो उत्कृष्ट लेकिन बहुत छोटा है। –

1

जीयूआई आवेदन के निर्माण के लिए एक अच्छा दृष्टिकोण ब्राउज़र की है जो:

  1. यूआई लेआउट
  2. के लिए मार्कअप का उपयोग कर जावास्क्रिप्ट यूआई तर्क
  3. यूआई स्टाइल के लिए सीएसएस का उपयोग कर का उपयोग कर

अधिकांश की आधुनिक जीयूआई फ्रेमवर्क (एक्सटीजेएस, डोजो इत्यादि) एपीआई प्रदान करते हैं जो पूरी तरह जावास्क्रिप्ट में जीयूआई बनाने में मदद करते हैं। लेकिन एक और जीयूआई ढांचा Ample SDK है जो चिंताओं के पहले उल्लिखित अलगाव लाता है। यह यूआई तर्क के लिए लेआउट, शैली के लिए सीएसएस और डीओएम एपीआई के लिए एक्सएमएल आधारित भाषाओं (एक्सएचटीएमएल, एक्सयूएल, एसवीजी) का उपयोग करने की अनुमति देता है।

पूर्व के लिए के रूप में एक क्लाइंट-साइड जीयूआई आवेदन आप या तो MVC या थोड़ा और अधिक उन्नत पैटर्न पीएसी का उपयोग कर सकते रच करने के लिए, - वहाँ एक PureMVC कार्यान्वयन उपलब्ध

निम्नलिखित स्निपेट पर एक नजर डालें (केवल है चिंताओं यूआई तर्क, नहीं एप्लिकेशन तर्क, MVC/पीएसी) के साथ निर्मित किया जाना:

index.html

<script type="application/ample+xml"> 
    <xul:tabbox onselect="fOnSelect(event)" 
    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
     <xul:tabs> 
      <xul:tab label="checkbox" /> 
      <xul:tab label="textbox" /> 
      <xul:tab label="datepicker" /> 
     </xul:tabs> 
     <xul:tabpanels> 
      <xul:tabpanel> 
       <xul:checkbox /> 
      </xul:tabpanel> 
      <xul:tabpanel> 
       <xul:textbox /> 
      </xul:tabpanel> 
      <xul:tabpanel> 
       <xul:datepicker /> 
      </xul:tabpanel> 
     </xul:tabpanels> 
    </xul:tabbox> 
</script> 

index.css

@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); 
xul|tab:focus { 
    color: red; 
} 

index.js

function fOnSelect(oEvent) { 
    alert(oEvent.currentTarget.selectedItems.length) 
} 
+0

दिलचस्प लगता है। मैं पहली बार इसके बारे में सुनता हूँ। क्या आप जानते हैं कि जेएस दुनिया में यह दृष्टिकोण कितना लोकप्रिय है? मैंने सोचा कि xul एक ऐसी भाषा है जिसका उपयोग मोज़िला के अनुप्रयोगों (केवल) द्वारा किया जाता है। – Anvaka

0

चेक बाहर एक साइट quince कहा जाता है। मुझे यकीन नहीं है कि यहां कितने पैटर्न जावास्क्रिप्ट ui पैटर्न हैं। लेकिन यह यूई पैटर्न

+0

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

0

पैटर्न हमेशा अज्ञात भाषा नहीं है। जावास्क्रिप्ट में बहुत से क्लासिक डिज़ाइन पैटर्न व्यर्थ हैं क्योंकि हमें कठोर लैंगेज प्रतिमानों में हल होने वाले बहुत से कामकाज की आवश्यकता नहीं है।

कारण एमवीसी क्लाइंट-साइड वेब विकास के लिए इतना गर्म फिट नहीं है, हालांकि यह अधिक परिस्थितिपूर्ण है।

सबसे पहले मुझे लगता है कि समय और दर्द साबित हुआ है कि सामान्य वेब अनुप्रयोगों को सर्वोत्तम रूप से दो अलग-अलग अनुप्रयोगों के रूप में माना जाता है। वह जो ब्राउज़र पर होता है और जो सर्वर पर होता है। आप दोनों के बीच स्थापित कम निर्भरताओं, अधिक लचीला, रखरखाव और आसान वेब ऐप्स मेरे अनुभव में संशोधित किया गया है। एम व्यापार तर्क है (जो लोग "डेटाबेस परत" आईएमओ के साथ गलत रूप से conflate करते हैं)।

उस परिदृश्य में एमवीसी के साथ समस्या यह है कि हम क्लाइंट-साइड पर व्यवसाय तर्क का खुलासा नहीं करना चाहते हैं और पूरे ऐप को एक घृणास्पद http-divide-hiding निर्माण में घुमाने का प्रयास करना मेरे जैसा उल्लेख किया गया है।

बहुत ही समान पैटर्न जहां आप डेटा को अलग करते हैं या "मॉडल देखें" चिंताओं को काफी अच्छी तरह से काम कर सकते हैं।

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