2011-11-30 49 views
1

我正在使用ColdFusion 9.0.1。如何将UDF库放入APPLICATION范围中?

现在,我们在我们的application.cfc中的onRequest()方法中包含了我们的UDF库。下面是我们如何它包含:

<cfscript> 
    // INCLUDE LIBRARY 
    include "udf/udf_library.cfm"; 
</cfscript> 

我想知道是否有把整个库到,这样它创建了一次,应用范围的一种方式。我们会做相同的方式,我们把我们的orders.cfc到应​​用范围,如:

APPLICATION.AppInfo.objOrders = createObject("component", "globaladmin.orders"); 

如果UDF库被转换为CFC来实现这一目标?

我们如何参考CFC中的函数?

目前我们所说的UDF功能有没有什么大惊小怪的,就像这样:

<cfscript> 
    createButton("Canada Postal Codes", "ShowSection", "ShippingCanadaPostalCodes"); 
    wrapCell(Buttons); 
    wrapRow(Cells, "TableSubHead")); 
</cfscript> 

这将是非常难看有每个函数前添加“APPLICTION.AppInfo”。

那么,将UDF库移动到APPLICATION范围还是只在其他地方加载它会有什么优势?

回答

1

我想你的UDFs的范围是一个好主意。因为它只是将它们作为REQUEST范围的一部分,所以如果在应用程序的其他部分的.cfm页面中声明了相同名称的方法,则会存在名称冲突的空间。

如果您确实在APPLICATION范围中添加了它们和对象,例如在onApplicationSart()中,那么您必须知道线程安全问题。假定你的UDF是相当独立的,所以你的APPLICATION范围对象不会保持任何内部状态,所以你在这方面应该足够安全。

如果您只是想创建一次,然后将您的函数添加到CFC并在您的Application.cfc的onApplicationStart()函数中创建它,并将其分配到APPLICATION范围,如上所述。

应该将UDF库转换为CFC来实现这种情况吗?

如何将我们引用的CFC功能?

APPLICATION.AppInfo.yourObj.createButton("Canada Postal Codes", "ShowSection", "ShippingCanadaPostalCodes") 
+0

Barry,在UDF/CFC中引用方法必须是一种更漂亮的方式。你在你的例子中的方式是麻烦的。这是最干净和最漂亮的方式吗? –

+1

@Evik:你可以在OnRequestStart()中用UDF复制对象。 ''。然后在你的代码中,你可以用一个小的前缀来调用函数:'udf.createButton(...)'。 – ale

+0

@Al,这很有道理。谢谢! –