我正在使用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>
答案 0 :(得分:3)
Variables
(这就是你现在拥有的)当然有效。另一个合理的选择是Request
,但我倾向于variables
而不是request
。
答案 1 :(得分:3)
是:强> 变量
<强>也许:强> 应用程序,Cookie,请求,服务器,会话
否:强> 参数,属性,来电者,CGI,客户端,Flash,表格,本地,这 ThisTag,Thread,thread local,URL
有关每个范围的信息,请查看CF9文档:scope types。
听起来你正在实施Front Controller pattern。
使用运行代码段的onRequest()实现Application.cfc。这样,它将拦截所有传入的请求并包含适当的cfm。不需要处理程序index.cfm,它只包含其他cfm模板。
进一步优化。让doLookup()方法返回一个只包含recordCount + movieId的Struct,因为它显示的就是您正在使用的所有内容。返回整个查询比只有两个数字的结构要慢。
CF9文件:Application.cfc。
答案 2 :(得分:2)
虽然Variables
范围或Request
范围可用于所包含的网页,但使用Request
范围可能会有所帮助,因为它是适用于任何范围的范围请求中的文件,而Variables
范围通常被认为是特定于给定页面。
事实上,Request
范围最初是为Allaire Spectra引入的,目的是在自定义标签之间共享变量。
所以,虽然两者都会做你想做的事情,但我会说Request
范围可能只有一点点优势来澄清意图。