2012-03-01 91 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