2013-07-31 4 views
5

मान लीजिए कि मेरे पास एक वेब एप्लिकेशन है जो बैकबोन.जेएस और हैंडलबार्स का उपयोग करके बनाया गया है। सर्वर के रूप में मैं Node.js. का उपयोग कर रहा हूँ अब मैं दोनों सिरों पर प्रतिपादन करना चाहता हूं, यानी सर्वर और क्लाइंट पर।सर्वर पर बैकबोन.जेएस अनुप्रयोग प्रस्तुत करें और ग्राहक

जब पहली बार अनुरोध किया जाता है, तो सर्वर प्रतिपादन करेगा (मुख्य रूप से प्रदर्शन कारणों से)। उसके बाद, निम्नलिखित सभी कार्रवाइयों के परिणामस्वरूप क्लाइंट-साइड प्रतिपादन होगा।

इसका मतलब है कि मैं क्लाइंट और सर्वर पर किसी भी पृष्ठ को पूरी तरह से उसी तरह प्रस्तुत करने में सक्षम होना चाहिए। दोनों सिरों को उसी तरह के मार्गों का समर्थन करना होता है।

मैं यह कार्य कैसे पूरा कर सकता हूं?

इस समय, मैंने एयरबिन की rendr प्रोजेक्ट पर एक नज़र डाली है, लेकिन यह निश्चित रूप से मुझे बैकबोन.जेएस से संबंध रखता है (मुझे यकीन नहीं है कि मैं बैकबोन.जेएस के साथ हर समय रहना चाहता हूं), और ऐसा लगता है अभी तक पूरी तरह खत्म नहीं हो। कम से कम, एयरबीएनबी अभी तक उत्पादन के उपयोग के लिए सिफारिश नहीं करता है।

ऐसा करने के तरीके पर कोई अन्य विचार?

उप-प्रश्न के रूप में मैं यह भी पूछ सकता हूं: सर्वर और क्लाइंट के बीच जावास्क्रिप्ट कोड साझा करने का पसंदीदा तरीका क्या है? इसके लिए, मुझे piler भी पता है, लेकिन मैं कल्पना कर सकता हूं कि बेहतर समाधान उपलब्ध हो सकते हैं।

कोई संकेत?

+1

उप-प्रश्न अलग, यह http://stackoverflow.com/questions/9023291/template-rendering-with-node-js-and-backbone-js?rq=1 का संभावित डुप्लिकेट है। जेएस टेम्पलेटिंग भाषाओं के बारे में आपको कुछ अच्छी चर्चा मिलेगी। और टेम्पलेट इंजन चयनकर्ता को मत भूलना! http://garann.github.io/template-chooser/ –

उत्तर

9

ठीक है, मैं ऐसा एप्लिकेशन बना रहा हूं जो ऐसा करता है। यदि आप rendr का उपयोग नहीं करना चाहते हैं, तो आपको अपनी कुछ चीजों के अपने संस्करणों को कोड करना होगा। इस समय AFAIK आपके विकल्प rendr या घर उगाए जाते हैं। यहां कुछ विविध युक्तियां दी गई हैं।

  • हम सर्वर साइड डोम के संचालन के लिए cheerio उपयोग करते हैं, तो जब विचारों सर्वर पर प्रस्तुत करना, this.$el एक बंदगी तत्व उदाहरण है। ब्राउज़र में, यह jQuery है।
  • आपको ईवेंट प्रतिनिधिमंडल और सर्वर की ओर बाध्यकारी की आवश्यकता नहीं है। हमारे कोड तकनीकी रूप से इस समय करते हैं, लेकिन यह व्यर्थ है और एक क्लीनर समाधान सर्वर
  • पर इससे बचने के बाद ब्राउज़र में सर्वर-सर्वर एचटीएमएल प्रदान करने के बाद, आपको दृश्य के बड़े घोंसले वाले पेड़ को तार करने का एक तरीका चाहिए बड़े घोंसले वाले डोम पेड़ में उनके संबंधित तत्वों के लिए। हमारे पास इसके लिए एक घर से उगाया गया समाधान है, लेकिन Backbone.View.setElement कोर है और आपको ऐसा करने के लिए कुछ कोड लिखने की आवश्यकता होगी
  • हम इस समय ब्राउज़र पर फिर से प्रतिपादन कर रहे हैं हालांकि संभवतः ले जाने का एक मामूली तरीका है एक दृश्य उदाहरण, इसे पूर्व-प्रस्तुत डोम नोड समेत कन्स्ट्रक्टर में कुछ विकल्प दें, और बिना किसी प्रतिपादन के चीजों को ठीक से तारित करें। हालांकि पाठक के लिए यह एक अभ्यास है। :-)
  • हम <script> टैग के भीतर जेएसओएन के रूप में आवश्यक कच्चे डेटा को भी भेजते हैं, इसलिए हमारे पास सर्वर-प्रस्तुत एचटीएमएल (कथित प्रदर्शन के लिए) और जेएसओएन के रूप में उपलब्ध कच्चे डेटा दोनों हैं, इसलिए हम अपने रीढ़ की हड्डी के मॉडल और विचार प्राप्त कर सकते हैं तत्काल और परिचालन। फिर, आपको इस स्थिति को प्रबंधित करने के लिए कुछ कोड के साथ आना होगा।
  • हम सर्वर और ब्राउज़र के बीच कोड को बंडल और साझा करने के लिए browserify का उपयोग करते हैं। हमारी सभी जावास्क्रिप्ट को कॉमनजेएस मॉड्यूल के रूप में कोड किया गया है।
  • हमारे पास हमारे दृश्य अभिभावक वर्ग में एक मूल isBrowser() फ़ंक्शन है, इसलिए हम जानते हैं कि ब्राउज़र-केवल कोड ईवेंट बाइंडिंग आदि के लिए कब चलाना चाहिए।

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

+0

आपने कैसे किया 'हम सर्वर-साइड डीओएम ऑपरेशंस के लिए चीरियो का उपयोग करते हैं, इसलिए जब सर्वर पर विचार प्रस्तुत होते हैं, तो यह $ एल एक चीयरियो तत्व उदाहरण है। ब्राउज़र में, यह jQuery है? – eugene

+0

क्या आपने 'प्रीरेंडर' का उपयोग करने पर विचार किया है? (https://github.com/prerender/prerender) मैं आपके नेतृत्व का पालन कर रहा था और पहले चरण पर अटक गया था। मेरे पास एक HTML है जिसमें जावास्क्रिप्ट ब्लॉक है। और सब कुछ वहां से शुरू होता है। मैं ब्राउज़र पक्ष के रूप में सर्वर पक्ष से स्क्रिप्ट ब्लॉक में जावास्क्रिप्ट निष्पादित कैसे करूं? मैं परेशान हूँ .. क्या आप कृपया एक प्रकाश डाल सकते हैं? – eugene

+0

नहीं, चूंकि मेरा सर्वर पक्ष नोड है, इसलिए विचार है कि एचटीएमएल को सर्वर-साइड ब्राउजर समाधान के बिना नोड में प्रस्तुत करना है, जो प्रींटर का उपयोग करता है। वैसे भी यह "isomorphic" लक्ष्य है। लेकिन इस समय अधिकांश जावास्क्रिप्ट कोड isomorphic नहीं है - आपको उस शैली में कार्य करने के लिए अपने एप्लिकेशन को डिज़ाइन करने की आवश्यकता है। –

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