2011-02-28 12 views
7

मेरे पास कुछ ठंडे फ़्यूज़न फ़ाइलें हैं जो समान सटीक जावास्क्रिप्ट कोड का उपयोग करती हैं। मैं जावास्क्रिप्ट को एक .js फ़ाइल में अलग करना चाहता हूं और इसे प्रत्येक फाइल में शामिल करना चाहता हूं ताकि मुझे कई बार दोहराना पड़े। तो, मैं "myPage.js" नाम की एक फ़ाइल में जावास्क्रिप्ट कोड अलग हो गए और "myPage.cfm" में मैं एक स्क्रिप्ट टैग शामिल -मैं बाहरी जावास्क्रिप्ट फ़ाइल को कैसे शामिल कर सकता हूं जिसमें शीतलन कोड है?

<script language="javascript" src="myPage.js"></script> 

समस्या वहाँ कुछ coldfusion जावास्क्रिप्ट के बीच फैला कोड है कि यह है कि <cfoutput> एस और ऐसे का उपयोग करके मूल्यों को इंजेक्ट करता है, और अब इसका सही अनुवाद नहीं किया जा रहा है, संभवतः क्योंकि यह इसे शुद्ध जावास्क्रिप्ट के रूप में पढ़ने की कोशिश कर रहा है। क्या कोई बाहरी तरीका है कि मेरे पास बाहरी जेएस फ़ाइल हो सकती है लेकिन यह इंगित करता है कि मैं इसे समझने के लिए शीतलन का उपयोग करना चाहता हूं?

एक वैकल्पिक हल है कि मैं मिल गया है, एक जावास्क्रिप्ट फ़ाइल, "myPageJavascript.cfm" कहा जाता है के बजाय एक coldfusion फ़ाइल में जावास्क्रिप्ट डाल एक <script type="text/javascript"> टैग में सभी जावास्क्रिप्ट कोड के चारों ओर, और फिर एक cfinclude का उपयोग शामिल करने के लिए करने के लिए है वह सभी पृष्ठों में जावास्क्रिप्ट। यह ठीक काम करता है, लेकिन यह मुझे जेएस फ़ाइल सहित सहज ज्ञान के रूप में प्रतीत नहीं होता है ... इस तरह की स्थितियों के लिए मानक अभ्यास क्या है? क्या इसे बाहरी जेएस फ़ाइल के रूप में कार्यान्वित करने का कोई तरीका है, या क्या मुझे बस अपनी ठंडे फ़्यूज़न फ़ाइल में चिपकना चाहिए?

उत्तर

8

अन्य उत्तर और अधिक सुरुचिपूर्ण और कुशल हैं लोड नहीं है, लेकिन आसान तरीका बाहर है इस तरह के रूप .cfm को .js से फाइल एक्सटेंशन बदलने के लिए:

<script language="javascript" src="myPage.cfm?id=#createUuid()#"></script> 

createUuid() लिए है कैशिंग को रोकें, मान लें कि फ़ाइल आउटपुट अलग-अलग होगा, संभवतः session स्कोप से चर के आधार पर। क्लाइंट इसे जावास्क्रिप्ट के रूप में लोड करता है, जबकि सर्वर इसे कोल्डफ्यूज़न के रूप में संसाधित करता है। आप स्टाइल शीट के साथ भी वही काम कर सकते हैं।

अब, अगर आपकी जावास्क्रिप्ट बुला पेज से मूल्यों पर निर्भर करता है कि आप उन्हें साथ URL पर पारित कर सकते हैं:

<script language="javascript" src="myPage.cfm?name1=value1&name2=value2"></script> 

इस स्थिति में आप वास्तव में कैशिंग का लाभ ले सकते कर सकते हैं जब एक ही URL पैरामीटर पारित कर रहे हैं।

कुल मिलाकर, यह दृष्टिकोण .js फ़ाइल "शुद्ध" रखने के लिए कोड को दोबारा करने से बहुत कम प्रयास हो सकता है, जबकि वेरिएबल्स आउटपुट करते समय यह <script/> ब्लॉक पर पहले निर्भर करता है।

+2

इसके अतिरिक्त, मैं इस हेडर को .cfm में शामिल करने की अनुशंसा करता हूं: '' – Sergii

+0

@ सर्गी: '' मैं मानता हूं कि यह करने के लिए सही बात है, लेकिन इस परिदृश्य में क्या फायदा है? मुझे लगता है कि क्लाइंट हमेशा सही काम करने के लिए http हेडर की आवश्यकता के बिना '

3

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

6

मैं सुझाव दूंगा कि आप जेएस से पहले एक स्क्रिप्ट ब्लॉक बनाएं जिसमें शामिल हैं जिसमें जेएस फ़ाइल सहित सभी चर शामिल हैं। आपके मामले में, उन cfoutput चर आप फाइल चर SOURCENAME जो coldfusion चर से actuall महत्व है उपयोग कर सकते हैं मुख्य फ़ाइल

<script type='text/javascript'> 
    var sourceName = <cfoutput>#Application.name#</cfoutput> 
    </script> 

    <script src="js/myPage.js" type="text/javascript"/> 

myPage.js में करने के लिए जे एस फ़ाइल के अंदर डाल चलते हैं। इस प्रकार आप कोल्डफ्यूजन कोड और जेएस कोड अलग करने में मदद करते हैं।

यदि आपके पास स्थानांतरित करने के लिए बहुत से चर हैं, तो ऑब्जेक्ट प्रकार चर बनाने पर विचार करें और उन सभी चर को इसके अंदर जोड़ें।

नोट: स्क्रिप्ट टैग के साथ जेएस जोड़ना इसे पृष्ठ प्रदर्शन को कैश और बढ़ाने में मदद करेगा। तो js CFM फ़ाइल के रूप में फ़ाइल

+2

सबसे सही दृष्टिकोण के लिए +1। उस ने कहा, मेरा मानना ​​है कि क्लाइंट एक .cfm, या किसी भी एक्सटेंशन को कैश करेगा, '

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

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