2011-02-28 83 views
7

我有幾個使用相同的JavaScript代碼的coldfusion文件。我想將JavaScript分成一個.js文件,並將其包含在每個文件中,這樣我就不必重複幾次。所以,我分開的JavaScript代碼到一個名爲「myPage.js」的文件,並在「myPage.cfm」我包括腳本標籤 -如何包含一個包含coldfusion代碼的外部JavaScript文件?

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

的問題是,還有的JavaScript之間傳播一些的ColdFusion代碼使用<cfoutput> s等注入值,並且不再被正確翻譯,可能是因爲它試圖將其讀爲純javascript。有什麼辦法可以讓我有一個外部的js文件,但表明我希望它使用Coldfusion來解釋它?

我找到的一種解決方法是將javascript放入coldfusion文件中,而不是名爲「myPageJavascript.cfm」的javascript文件,將所有JavaScript代碼包圍在<script type="text/javascript">標記中,然後使用cfinclude包含在所有頁面的JavaScript。這工作正常,但在我看來並不像包括一個js文件一樣直觀......對於這種情況的標準做法是什麼?有沒有什麼辦法來實現這個作爲外部js文件,或者我應該堅持我的Coldfusion模板文件?

回答

8

其他的答案是更優雅和高效,但討巧從.js文件擴展名更改爲.cfm這樣:

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

createUuid()是那裏阻止緩存,假設文件輸出不同,最有可能基於session範圍內的變量。客戶端將其作爲JavaScript加載,而服務器將其作爲ColdFusion進行處理。你也可以用樣式表做同樣的事情。現在

,如果你的JavaScript依賴於從調用頁面的值,可以沿着URL傳遞他們:

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

在這種情況下,你可以真正可以採取緩存的優勢,當相同的URL參數通過。

總的來說,與重構代碼相比,這種方法可以比.js文件保持「純粹」更少的工作量,同時預先輸出取決於<script/>塊的變量。

+2

此外,我建議在.cfm中包含這個頭文件:'' – Sergii 2011-02-28 11:22:37

+0

@Sergii:with''我同意這是正確的做法,但在這種情況下有什麼優勢?我假設客戶端將始終如此處理'

3

如果您將ColdFusion代碼移回到您從中獲得它的位置,您將使用它設置一些JavaScript變量,並且只保留純JavaScript,然後在您的外部JavaScript文件中使用這些變量。這將是最簡單的解決方案。更高級的東西是定義外部JavaScript文件中的函數,這些函數可以從ColdFusion生成的HTML中的腳本標記中調用。

6

我建議你在js include之前創建一個腳本塊,其中包含要在包含js文件中使用的所有變量。在你的情況下,將你把js文件裏面的主要文件

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

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

在myPage.js文件,你可以使用變量SOURCENAME具有不同於ColdFusion的變量的實際工作值那些CFOUTPUT變量。從而幫助您分離coldfusion代碼和js代碼。

如果您有很多要移出的變量,請考慮創建對象類型變量並在其中添加所有這些變量。

注意:使用腳本標記添加js將有助於緩存並提高頁面性能。所以,不要加載JS文件爲CFM文件

+2

+1的最正確的做法。這表明,我相信客戶端也會緩存一個.cfm或者'