2013-07-08 3 views
6

आइए कहें कि मेरे पास ब्राउज़र खुला है, और जावास्क्रिप्ट में मैं एक वैश्विक चर घोषित करता हूं।जेड टेम्पलेट क्लाइंट-साइड वैश्विक चर का उपयोग कैसे कर सकता है?

window.myGlobalVar = 'Hello!'; 

मैं क्लाइंट साइड प्रतिपादन के लिए एक जेड टेम्पलेट संकलित करता हूं जो उस चर का उपयोग करता है।

.foo= myGobalVar 

कौन सा मैं बहुत तरह संकलन:

jade.compile('.foo= myGobalVar', { 
    client: true, 
    compileDebug: false 
}).toString() 

इस टेम्पलेट समारोह पैदावार कौन सा:

function anonymous(locals) { 
    var buf = []; 
    var locals_ = (locals || {}), 
     myGobalVar = locals_.myGobalVar; 
    jade.indent = []; 
    buf.push("\n<div class=\"foo\">" 
      + (jade.escape(null == (jade.interp = myGobalVar) ? "" : jade.interp)) 
      + "</div>");; 
    return buf.join(""); 
} 

कौन सा जब भाग गया, होगा उत्पादन:

<div class="foo">undefined</div> 

जैसा कि आप देख सकते हैं, जेड कंपाइलर नोटिस करता है कि मैंने एक चर का उपयोग किया है, और myGobalVar = locals_.myGobalVar; के माध्यम से इसे स्थानीय चर के रूप में मजबूर करता है, जो वैश्विक वैरिएबल को वास्तव में उपयोग करना चाहता है।

इसलिए मैंने window.myGlobalVar संदर्भित करने का प्रयास किया और जेड तो बस window छायांकित किया।

क्यों न सिर्फ हर वैश्विक में प्रवेश करना चाहते हैं? ठीक है रनटाइम पर मुझे यकीन नहीं है कि ग्लोबल्स क्या आवश्यक हैं। मेरे पास दर्जनों वैश्विक रचनाकार हैं और उन्हें सभी को स्पष्ट रूप से पारित करने के लिए काफी रिफैक्टरिंग की आवश्यकता होगी।

तो मैं क्लाइंट साइड जेड टेम्पलेट को इस तरह से संकलित कैसे करूं जो ग्लैबल वैरिएबल के संदर्भों की अनुमति देता है?


अद्यतन:

मैं इन सबसे छुटकारा इस के साथ सफल था।

for (key in window) { 
    if (localsObject[key] == null) 
    localsObject[key] = window[key]; 
    } 
} 

renderTemplate(localsObject); 

लेकिन भगवान डर है जो मुझे गंदा महसूस करता है ... निश्चित रूप से एक बेहतर तरीका है?

+1

(सिर्फ 'बनाम myGlobalVar'' myGobalVar' को ध्यान में लाने) – Kos

उत्तर

2

आप ग्लोबल्स के नाम पास कर सकते हैं, आप जेड टेम्पलेट्स में उपयोग करना चाहते हैं, संकलन फ़ंक्शन के विकल्प ऑब्जेक्ट के साथ। जेड एपीआई डॉक्स देखें: http://jade-lang.com/api/

jade.compile(template, { globals: ['globalone','globaltwo']}) 

कार्रवाई में यह देखने के लिए इस बेला देखें: http://jsfiddle.net/lchngr/J5WJb/5/

+0

अपने बेला जेड फ़ाइल – danielrvt

+0

वहाँ नहीं है कोई जेड फ़ाइल नहीं है! जेड कोड स्ट्रिंग है। कृपया फिर से पहेली को देखें और अपने नीचे वोट पर पुनर्विचार करें। लेकिन आयातित पलज lib का लिंक टूटा हुआ था। मैंने फिडलर लिंक अपडेट किया – slu

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