2012-04-23 20 views
9

वे दोनों चर डालने के लिए एक ही वाक्य रचना का उपयोग करें। उदाहरण के लिए अगर मैं अपने अंडरस्कोर, अपने मुख्य EJS टूटता में निम्नलिखितमैं कैसे EJS साथ संयोजन के रूप में Underscore.js टेम्पलेट का उपयोग कर सकते हैं?

<%= username %> 

चाहते हैं, क्योंकि यह उपयोगकर्ता नाम के बजाय कोशिश करता है और इस तरह का कोई चर मुख्य पृष्ठ में मौजूद है।

+0

आपको दोनों की आवश्यकता क्यों है? और यहां वर्णित स्क्वायर ब्रैकेट काम करते हैं? http://code.google.com/p/embeddedjavascript/wiki/Testing – Marc

+1

मैं बैकबोन.जेएस – deltanovember

+0

के साथ ईजेएस का उपयोग कर रहा हूं स्क्वायर ब्रैकेट आपके लिए काम कर रहे हैं? – Marc

उत्तर

9

मुझे लगता है कि वर्ग कोष्ठक EJS में डिफ़ॉल्ट रूप से काम करेगा:

[%= username %] 

और अगर आप अधिक सजावटी प्राप्त करने की आवश्यकता, EJS GitHub पेज का वर्णन कस्टम टैग बनाने का तरीका:

var ejs = require('ejs'); 
ejs.open = '{{'; 
ejs.close = '}}'; 
  • मुझे लगता है कि दूसरा "फैनसीयर" भाग सर्वर-साइड अनुप्रयोगों के लिए विशिष्ट हो सकता है

https://github.com/visionmedia/ejs

ग्राहक के पक्ष GitHub उदाहरण का उपयोग करना, आप इस तरह वाक्य रचना करने के लिए जब आप प्रस्तुत करना आवश्यकता होगी:

var html = require('ejs').render(users, { open: "^%", close: "%^" }); 

विकल्प render() के 2 पैरामीटर हैं।

10

मैं इस मुद्दे था और सोचा था कि मैं समाधान मैं इस मुद्दे ग्राहक के पक्ष को सुलझाने के लिए मिल गया का हिस्सा होगा। यहां पर अपने परिवर्तन भागने regex (docs Underscore.js के माध्यम से) है:

_.templateSettings = { 
    interpolate : /\{\{(.+?)\}\}/g 
}; 
var template = _.template("{{example_value}}"); 

में बदलती है <% =%> {{}}।

1

मैं जब मैं पीछे के अंत पर EJS टेम्पलेट का उपयोग कर वेब पेज रेंडर करने के लिए (व्यक्त) चाहता था एक ही मुद्दा था, इस बीच मैं सामने के अंत पर अंडरस्कोर टेम्पलेट का उपयोग किया था।

मैं मार्क का जवाब करने की कोशिश की, लेकिन यह मदद नहीं करता है, मुझे लगता है कि नए संस्करण में उपयोग करने के लिए पुराने हो चुके किया गया है। ईजेएस के नए संस्करण में (मेरा 2.3.3 है), अब आप ejs.open और ejs.close का उपयोग नहीं कर सकते हैं, ejs.delimiter का उपयोग करें।

मैं EJS में '$' के लिए सीमांकक बदल तो EJS केवल <$ $> टैग के साथ संभाल होगा वैरिएबल प्रविष्ट और अर्थहीन वाक्य रचना के रूप में <% %> टैग लेने के लिए।

app.set('view engine', 'ejs'); 
var ejs = require('ejs'); 
ejs.delimiter = '$'; 
app.engine('ejs', ejs.renderFile); 

नोट: मैं एक्सप्रेस अनुप्रयोगों में app.js फ़ाइल में उपरोक्त कोड जोड़ सकते हैं और यह ठीक काम किया है, और आप सामने के अंत पर इसका इस्तेमाल करना चाहते हैं, सिर्फ विकल्प तर्क के रूप में ejs.render(str, options) में {'delimiter': '$'} गुजरती हैं।

0

मैं हाल ही में इस मुद्दे में पड़ गए और मैं EJS पुन: कॉन्फ़िगर नहीं करना चाहता था, तो मैं कैसे अंडरस्कोर interpolates बदल गया है, मूल्यांकन करता है, और मूल्यों निकल जाता है।

_.templateSettings = { 
    interpolate: /\{\{=([^}]*)\}\}/g, 
    evaluate: /\{\{(?!=)(.*?)\}\}/g, 
    escape: /\{\{-([^}]*)\}\}/g 
}; 

दूसरे शब्दों में, स्निपेट के ऊपर अंडरस्कोर में निम्नलिखित बदल जाएगा:

_.templateSettings = { 
    interpolate: /<%([\s\S]+?)%>/g, 
    evaluate: /<%=([\s\S]+?)%>/g, 
    escape: /<%-([\s\S]+?)%>/g 
}; 

तो मैं करने के लिए सेटिंग को अपडेट:

डिफ़ॉल्ट रूप से, यहां वर्तमान अंडरस्कोर templating सेटिंग्स हैं:

  • अंतर्वेशन

    • से: <%= ... %>
    • करने के लिए: {{= ... }}
    • अभिव्यक्ति: /\{\{=([^}]*)\}\}/g
  • मूल्यांकन

    • से: <% ... %>
    • +०१२३५१६४१०६
    • करने के लिए: {{ ... }}
    • अभिव्यक्ति: /\{\{(?!=)(.*?)\}\}/g
  • भागने

    • से <%- ... %>
    • करने के लिए: {{- ... }}
    • अभिव्यक्ति: /\{\{-([^}]*)\}\}/g

तब मेरे अंडरस्कोर टेम्पलेट इस तरह दिखता है:

// Underscore 
<script type="text/template"> 
    <ul> 
    {{ _.each(collection, function(model) { }} 
    <li>{{= model.text }}</li> 
    <li>{{- model.textEscaped }}</li> 
    {{ }); }} 
    </ul> 
</script> 

... और मेरे EJS टेम्पलेट्स ही रहते हैं और मैं अंतर्वेशन/मूल्यांकन करता मूल्यों के लिए डिफ़ॉल्ट ERB सिंटैक्स का उपयोग करने के लिए जारी कर सकते हैं: <% ... %> और <%= ... %>:

// EJS 
<% if (isAuthenticated) { %> 
    <%= user.displayName %> 
<% } %> 
संबंधित मुद्दे