2012-04-17 12 views
6

मैं जो वेब ऐप बना रहा हूं, मैं क्लासिकल एक्सप्रेस + जेड का उपयोग क्लाइंट पेजों को प्रस्तुत करने के लिए करता हूं और कुछ आरईएसटी एपीआई का पर्दाफाश करता हूं (मान लें: "उपयोगकर्ता सूची एपीआई")।ग्राहक पक्ष + सर्वर पक्ष templating, मुझे गलत लगता है, अनुकूलित करने के लिए कैसे?

ये ग्राहक पृष्ठ "उपयोगकर्ता सूची" को पुनर्प्राप्त करने और इसे प्रदर्शित करने के लिए प्रदान की गई API का उपयोग करते हैं। इसे प्रदर्शित करने के लिए, डेटा पुनर्प्राप्त होने के बाद, मैं हैंडलबार टेम्पलेट लाइब्रेरी का उपयोग करता हूं।

यह दो टेम्पलेट इंजनों का उपयोग करके, दो बार कोड को पार्स करने, इसे बेहतर बनाने के लिए, मुझे थोड़ा गंदा लगता है?

नोट: मैंने क्लाइंट पेज के भीतर प्रारंभिक डेटा भेजकर इसे एक स्क्रिप्ट वैरिएबल डालने से पहले ही चीज़ को अनुकूलित किया है। यह वैरिएबल तब प्रदर्शित होता है जैसे एपीआई द्वारा प्राप्त डेटा होगा। एपीआई केवल डेटा रीफ्रेश के मामले में उपयोग किया जाता है।

अद्यतन: जेड दोनों सर्वर और क्लाइंट पक्ष का उपयोग करना एक अच्छा विचार है लेकिन कैसे अलग/निर्दिष्ट करना है? प्रस्तुत किए गए टेम्पलेट का हिस्सा हिस्सा पृष्ठ की सेवा करते समय किया जाना चाहिए और ग्राहक द्वारा किस भाग का उपयोग किया जाएगा?

+1

आप [ब्राउज़र में] जेड टेम्पलेट का उपयोग कर सकते हैं (https://github.com/visionmedia/jade#a4)। कई अन्य टेम्पलेट इंजन हैं जो नोड और ब्राउज़र दोनों में भी काम करते हैं। –

+0

मुझे पता है कि जेड क्लाइंट और सर्वर दोनों पक्षों का उपयोग किया जा सकता है लेकिन फ़ाइल में क्लाइंट और सर्वर साइड टेम्पलेट को कैसे अलग किया जाए? आप सर्वर साइड जेड प्रोसेसर को टेम्पलेट के क्लाइंट भाग की गणना न करने के लिए कैसे कहते हैं? –

+1

मैं आपको अपने टेम्पलेट्स को व्यवस्थित करने का तरीका नहीं बता सकता, जिस तरह से मैं इसे हल करता हूं, टेम्पलेट को सरल बनाते समय, और सर्वर और क्लाइंट पर एक ही टेम्पलेट का उपयोग करना है। लेआउट केवल सर्वर पर ही प्रदान किया जाता है, जबकि आंशिक (संसाधन टेम्पलेट्स) प्रदान किया जा सकता है जहां यह समझ में आता है। –

उत्तर

4

क्लाइंट साइड + सर्वर साइड टेम्पलेटिंग का उपयोग करना बहुत आसान है। जब हम कुछ वेब ऐप्स बना रहे हैं, तो हमें कुछ डेटा प्राप्त करने के लिए AJAX का उपयोग करना चाहिए और इसके साथ निपटने के लिए कॉलबैक फ़ंक्शन का उपयोग करना चाहिए। इसलिए हमें इन डेटा को प्रस्तुत करना चाहिए ग्राहक की ओर।

प्रश्न यह है कि उन्हें क्लाइंट साइड पर कैसे प्रस्तुत किया जाए?

अब हमें केवल क्लाइंट साइड jade.js. की आवश्यकता है।

इस दस्तावेज़ का पालन करें: https://github.com/visionmedia/jade#readme

पहले

git clone https://github.com/visionmedia/jade.git 

दूसरा

$ make jade.js (in fact the project has already compile the file for us) 

so we just need to copy this file to the path that we use. 

तीसरा

read my demo below : 

<script type='text/javascript' language='javascript' src="lib/jquery-1.8.2.min.js"></script> 
<script type='text/javascript' language='javascript' src="lib/jade/jade.js"></script> 
<script type='template' id='test'> 
ul 
    li hello world 
    li #{item} 
    li #{item} 
    li #{item} 
</script> 
<script> 
    var compileText = $("#test").text(); 
    console.log(typeof(compileText)); 
    var fn = jade.compile(compileText , { layout : false }); 
    var out = fn({item : "this is item " }); 
    console.log(out); 
    $("body").append(out); 
</script> 

अब तुम शरीर

hello world 
this is item 
this is item 
this is item 

में उत्पादन परिणाम देख सकते हैं इस डेमो मुझे लगता है कि आप जेड सर्वर साइड और ग्राहक अलग करने के कैसे पता होगा कि पढ़ने के बाद side.If आप समझ सकते हैं जो एक संकलन जेड टेम्पलेट, तो सभी प्रश्न आसान हैं।

शायद आपके पास अब एक और सवाल होगा। * जेड में कुछ जेड टेम्पलेट कोड कैसे लिखें? दस्तावेज़ हमें यह करने का एक तरीका भी प्रदान करता है। यह ट्यूटोरियल आपकी मदद कर सकता है।

index.jade

!!!5 
html 
    head 
    title hello world 
    body 
    ul#list 

    script#list-template(type='template') 
     |- for(var i in data) 
     | li(class='list') \#{ data[i].name } 
     |- } 

index.js

/* you javascript code */ 
var compileText = $('#list-template').text(); 
var compile = jade.compile(compileText , { layout : false }); 

var data = [{ "name" : "Ben" } , {"name" : "Jack" } , {"name" : "Rose" }]; 
var outputText = compile(data); 

$("#list").append(outputText); 
+0

मुझे 'टेक्स्ट/टेम्पलेट' प्रकार के साथ स्क्रिप्ट टैग के बारे में होना चाहिए। यह जवाब वास्तव में मेरे ऑटो-उत्तर से थोड़ा बेहतर है। –

1

http://github.com/flatiron/plates टेम्पलेट इंजन का उपयोग करें जो क्लाइंट साइड और सर्वर दोनों तरफ काम करेगा।

+0

प्लेट्स एक्सप्रेस के साथ गठबंधन करने में असहज लगती हैं और मैं अपने ऐप को फ्लैट्रियन पर फिर से लिखना नहीं चाहता (पुनः लिखना समस्या है, फ्लैटर नहीं)। –

+0

आप जेड की नकल करने के लिए एक्सप्रेस में प्लेट्स के लिए प्लगइन लिख सकते हैं। तो यह एक्सप्रेस –

+0

के साथ गठबंधन करने की एक बड़ी समस्या नहीं होगी हां, लेकिन यह मेरे प्रश्न को हल नहीं करेगा, वैसे भी, मुझे क्लाइंट और सर्वर दोनों पक्षों के लिए जेड होने जैसी समस्या होगी: क्लाइंट का क्लीन अलगाव कैसे करें और सर्वर टेम्पलेट्स? –

1

कुछ हफ्ते पहले मैंने हैंडलबार टेम्पलेट्स के लिए क्लाइंट और सर्वर के बीच साझा करने के लिए एक एनपीएम पैकेज लिखा था। यह बहुत बुनियादी है, लेकिन यह अब तक मेरे लिए वास्तव में अच्छी तरह से काम कर रहा है:

https://github.com/jwietelmann/node-handlebars-precompiler

संपादित: मैं अलग से "एचबीएस" का उपयोग कर रहा सर्वर साइड प्रतिपादन के लिए पैकेज के रूप में। जब भी मैं अपने एचबीएस दृश्य अपडेट करता हूं तो प्रीकंपलर सिर्फ मेरी सार्वजनिक जावास्क्रिप्ट निर्देशिका में प्रीकंपिल्ड टेम्पलेट्स प्रदान करता है।

+0

वास्तव में दिलचस्प, पहले आपका जवाब नहीं देखा! –

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