【问题标题】:How to put UDF library into the APPLICATION scope?如何将 UDF 库放入 APPLICATION 范围?
【发布时间】:2011-11-30 14:33:13
【问题描述】:

我正在使用 ColdFusion 9.0.1。

现在,我们将 UDF 库包含在 application.cfc 的 onRequest() 方法中。以下是我们包含它的方式:

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

我想知道是否有办法将整个库放入 APPLICATION 范围内,以便只创建一次。我们是否会像将 orders.cfc 放入 APPLICATION 范围一样这样做,如下所示:

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 范围或仅在其他地方加载一次是否有任何优势?

【问题讨论】:

    标签: coldfusion coldfusion-9 application.cfc


    【解决方案1】:

    我认为确定 UDF 的范围是个好主意。由于您只是将它们作为 REQUEST 范围的一部分,因此如果在应用程序的其他部分的 .cfm 页面中声明了相同名称的方法,则存在名称冲突的空间。

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

    如果您只想创建一次,则将您的函数添加到 CFC 并在 Application.cfc 的 onApplicationStart() 函数中创建它,并按照上述说明分配给 APPLICATION 范围。

    是否应该将 UDF 库转换为 CFC 来实现这一点?

    我们将如何引用 CFC 中的函数?

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

    【讨论】:

    • Barry,必须有一种更漂亮的方式来引用 UDF/CFC 中的方法。您在示例中使用它的方式很麻烦。这是最干净、最漂亮的方式吗?
    • @Evik:您可以使用 OnRequestStart() 中的 UDF 复制对象。 &lt;cfset udf=application.AppInfo.yourObj&gt;。然后在您的代码中,您可以只使用一个小前缀来调用函数:udf.createButton(...)
    • @Al,这是有道理的。谢谢!
    • 你们俩都完美地完成了这项工作。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多