2012-03-01 156 views
1

我正在使用ColdFusion 9.0.1哪個是正確的使用範圍?

我正在運行一個包含其他頁面的頁面。此頁面的主要目的是確定要包含哪個頁面。將包含的頁面將使用我在頁面中使用的變量,這將是MovieID(在這種情況下)。

我的問題是哪個是在這個頁面上使用的最佳範圍?它會是VARIABLES嗎?

<cfscript> 
Lookup = CGI.QUERY_STRING; 
Query = CFC.doLookup(Lookup); 
if (Query.RecordCount == 0) { 
    include "Content/Home.cfm"; 
} else { 
    // MOVIE PAGE 
MovieID = Query.MovieID; // WHAT SCOPE SHOULD I USE HERE? FOR MOVIEID? 
include "Content/Movie.cfm"; 
} 
</cfscript> 

回答

3

是: 變量

可能: 應用,餅乾,請求,服務器,會話

號: 參數,屬性,來電,CGI,客戶端,閃存,窗體,Local,This ThisTag,線程,線程本地,URL

有關每個範圍的信息,che ck CF9文檔:scope types

聽起來像你正在執行Front Controller pattern

使用運行代碼片段的onRequest()實現Application.cfc。這樣,它會攔截所有傳入的請求幷包含適當的cfm。跳過需要一個只包含其他cfm模板的處理程序index.cfm。

進一步優化。讓你的doLookup()方法返回一個只包含recordCount + movieId的Struct,因爲它看起來就是你正在使用的。返回整個查詢比只有兩個數字的結構慢。

CF9文檔:Application.cfc

+0

非常感謝額外的信息(Wiki鏈接)以及將控制器移動到Application.cfc的建議。現在你提到它,這是一個完美的想法。非常感謝!!! – 2012-03-01 15:32:26

+0

Query.MovieID也可能已被使用,並且它將只是或多或少的只讀。 – 2012-11-28 00:14:27

3

Variables(這是你現在擁有的)當然有效。另一個合理的選擇將是Request,但我會傾向variables超過request

+0

傑克,感謝澄清和確認我的想法。對此,我真的非常感激。 – 2012-03-01 15:33:10

2

儘管兩種Variables範圍或Request範圍將提供給包含的網頁,使用Request範圍可以因爲它是旨在提供給在請求任何文件中的範圍有用的,而Variables範圍通常被認爲具體到給定的頁面。

事實上,Request作用域最初是爲Allaire Spectra引入的,目的是在自定義標記間共享變量。

所以,雖然兩者都會按照您的要求做,但我會說Request範圍可能有一點小優點,可以澄清更多的意圖。

+0

是的,它似乎像REQUEST可能有輕微的優勢。謝謝(你的)信息! – 2012-03-01 15:36:27