2010-09-02 11 views
8

मैं एक जेएसएफ भारी वेब एप्लिकेशन को एक आरईएसटी और मुख्य रूप से जेएस मॉड्यूल एप्लिकेशन में स्थानांतरित करने की प्रक्रिया में हूं।जावास्क्रिप्ट स्वयं में सैंडबॉक्स घटनाएं और क्लाइंट साइड स्टैक

मैं YUI थिएटर (उत्कृष्ट वीडियो) पर "स्केलेबल जावास्क्रिप्ट आवेदन वास्तुकला" देख चुके निकोलस Zakas द्वारा और मैं अच्छा सफलता के साथ बात के बहुत से लागू किया है, लेकिन मैं कुछ सवाल हैं:

  1. मैंने पाया मॉड्यूल और सैंडबॉक्स के बीच संबंधों के संबंध में व्याख्यान थोड़ा सा भ्रमित है, एक तरफ, मेरी समझ के लिए, मॉड्यूल को उनके सैंडबॉक्स के बाहर कुछ घटित होने से प्रभावित नहीं होना चाहिए और यही कारण है कि वे सैंडबॉक्स के माध्यम से ईवेंट प्रकाशित करते हैं (और नहीं कोर, चूंकि मूल आधार को छिपाने के लिए है) लेकिन आवेदन में प्रत्येक मॉड्यूल को एक नया सैंडबॉक्स मिलता है? सैंडबॉक्स को घटनाओं का उपयोग करके मॉड्यूल में सीमित नहीं करना चाहिए या घटनाओं को क्रॉस पेज प्रकाशित करना चाहिए? जैसे : अगर मेरे पास दो संपादन योग्य टेबल हैं, लेकिन मैं प्रत्येक को एक अलग सैंडबॉक्स में रखना चाहता हूं और इसकी घटनाएं केवल उस सैंडबॉक्स के अंदर मॉड्यूल को प्रभावित करती हैं, प्रति तालिका संदेश बॉक्स जैसे कुछ अलग मॉड्यूल/विजेट है, मैं इसे सैंडबॉक्स के साथ कैसे कर सकता हूं प्रति मॉड्यूल, निश्चित रूप से मैं मॉड्यूलिड के साथ घटनाओं को उपसर्ग कर सकता हूं लेकिन यह युग्मन बनाता है जिसे मैं टालना चाहता हूं ... और मैं एक मॉड्यूल प्रति संयोजन के रूप में मॉड्यूल को एक साथ पैकेज नहीं करना चाहता क्योंकि मेरे पास पहले से 6-7 मॉड्यूल हैं।

  2. मैं आईडी चयनकर्ता आदि की तरह छोटी बातों के लिए आधार पुस्तकालय छिपा कर सकते हैं जबकि .. मैं अभी भी मॉड्यूल निर्भरता और संसाधन लोड करने के लिए आधार पुस्तकालय का उपयोग करें और YUI लोडर की तरह कुछ का उपयोग करें या वास्तव में इतना dojo.require चाहते हैं मैं मैं आधार पुस्तकालय को छुपा रहा हूं लेकिन मॉड्यूल स्वयं को मूल पुस्तकालय द्वारा परिभाषित और लोड किया गया है ... मेरे लिए थोड़ा अजीब लगता है।

  3. पुस्तकालय साधारण जेएस ऑब्जेक्ट्स वापस नहीं करते हैं लेकिन आमतौर पर उन्हें लपेटते हैं उदा। : आप $$ ('। Classname') जैसे कुछ कर सकते हैं। प्रत्येक (.. जो कोड को बहुत साफ करता है, बेस को लपेटने के लिए कोई समझ नहीं आता है और फिर मॉड्यूल में बेस लाइब्रेरी के लिए निष्पादन करके निर्भरता बनाते हैं। लेकिन उन सुविधाओं का उपयोग नहीं करने से बहुत सारे कोड लिखे गए हैं जिन्हें छोड़ दिया जा सकता है ... और उस कार्यक्षमता को कार्यान्वित करना बहुत बग प्रवण है।

  4. क्या किसी को इस आदेश के सामने की ओर ढेर बनाने के साथ कोई अनुभव है? कितना आसान यह एक आधार पुस्तकालय बदल जाता है और/या विभिन्न पुस्तकालयों से मॉड्यूल है, yui datatable का उपयोग कर, लेकिन डोजो के साथ प्रपत्र सत्यापन कर ...?

  5. 2 + 4 का एक संयोजन की कुछ हद तक अगर आप मैं की तरह कुछ करने के लिए चुनें यूयूआई लोडर के माध्यम से इनपुट के लिए डोजो फॉर्म सत्यापन सत्यापन लोड और लोड किया गया था टी मतलब डोजोकोर एक मॉड्यूल है और फॉर्म मॉड्यूल इस पर निर्भर है?

धन्यवाद।

+0

मैं वास्तव में जिस तरह से में दिलचस्पी रखता हूँ, तुम कैसे JSF (a4j की तरह विशेष रूप से इसके बैकएंड कनेक्टर्स: jsFunction) संयुक्त जावास्क्रिप्ट मॉड्यूल समझाया रखने के लिए ?! –

+0

हाय निकिता, मैंने जेएसएफ को कनेक्ट नहीं किया, मैंने इसे बदल दिया, मूल रूप से मैंने अपनी पिछली अंत सेवाओं को लिया जो जेएसएफ बीन्स में समाहित थे और उन्हें रीस्ट मैपिंग के माध्यम से उजागर किया और शुद्ध जेएस में एक इंटरफेस लिखा। – Amnon

उत्तर

3

हम अपने अनुप्रयोगों में इस पैटर्न का भारी उपयोग करते हैं। Sandbox पैटर्न को कार्यान्वित करने के तरीके में एक विस्तृत रूप के लिए Stoyan Stefanov द्वारा जावास्क्रिप्ट पैटर्न पुस्तक देखें। मूल रूप से यह इस तरह दिखता है:

(function (global) { 
    var Sandbox = function fn (modules, callback) { 
     var installedModules = Sandbox.modules, 
      i = 0, 
      len = modules.length; 

     if (!(this instanceof fn)) { 
      return new fn(modules, callback); 
     } 

     // modules is an array in this instance: 
     for (; i < len; i++) { 
      installedModules[modules[i]](this); 
     } 

     callback(this); 
    }; 

    Sandbox.modules = {}; 
    global.Sandbox = Sandbox; 

})(this); 

// Example module: 
// You extend the current sandbox instance with new functions 
Sandbox.modules.ajax = function(sandbox) { 
    sandbox.ajax = $.ajax; 

    sandbox.json = $.getJSON; 
}; 

// Example of running your code in the sandbox on some page: 
Sandbox(['ajax'], function(sandbox) { 

    sandbox.ajax({ 
     type: 'post', 
     url: '/Sample/Url', 
     success: function(response) { 
      // success code here. remember this ajax maps back to $.ajax 
     } 
    }); 

}); 
+0

स्थापित मॉड्यूल कहीं भी घोषित नहीं किया गया है ... क्या यह वैश्विक या टाइपो है? – mrk

+0

टाइपो। संशोधित, देखें कि क्या यह काम करता है। – Eli

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