【问题标题】:How do I access a UDF library in the APPLICATION scope using a shortened name?如何使用缩短名称访问 APPLICATION 范围内的 UDF 库?
【发布时间】:2012-02-01 17:02:13
【问题描述】:

我正在使用 ColdFusion 8.0.1。

我创建了一个 UDF 库并将其放入 CFC。我像这样在 APPLICTION 范围内加载库:

// CREATE STRUCTURE OBJECTS
if (not isDefined("APPLICATION.AppOBJ") or not isStruct(APPLICATION.AppOBJ)) {
    APPLICATION.AppOBJ = structNew();
    APPLICATION.AppOBJ.udf_library = createObject("component", "udf.udf_library");
} 

图书馆工作得很好!但我想减少访问功能所需的代码,以缩短参考。目前,我必须访问这样的功能:

APPLICATION.AppOBJ.udf_library.myFunction();

我希望能够将此库对象引用为“UDF”,如下所示:

UDF.myFunction();

在另一个 ColdFusion 9 项目中(同样,这是一个 CF8 项目!),我可以在创建 ojbect 后立即执行此操作

<cfset udf = APPLICATION.AppOBJ.udf_library>

在当前项目中,这在 application.cfm 文件中不起作用。但是,当我将它放在正在使用的页面上时,它确实有效。

我的问题是,我可以将最后一行代码放在上游多远才能使变量在应用程序的任何页面上都可用?这种东西CF8和CF9有区别吗?区别是因为我在 application.CFM 和 application.CFC 中工作吗?

谢谢!!!

-- 编辑 -- 更多信息 ---

我尝试访问 APPLICATION.AppOBJ.udf_library 对象的文件位于自定义标记中。有关系吗?

-- 答案 -- 感谢 MICAH 和 BEN NADEL ---

【问题讨论】:

  • 在 Application.cfm 中设置 udf 变量时是否出错?如果是这样,错误是什么?
  • 您确定 application.cfm 正在触发这行代码吗?你在 application.cfm 中的任何东西都会在页面被处理之前运行,但通常你会在相当多的代码周围添加初始化控件。
  • @JakeFeasel 我在 application.cfm 中添加这个时没有收到错误:
  • Ben Nadel 提出了一个有趣的方法,它允许您访问 UDF,就好像它们是内置函数一样:bennadel.com/blog/…

标签: coldfusion coldfusion-9 coldfusion-8 cfc


【解决方案1】:

我还没有尝试过,但我认为它应该可以工作,因为这个想法来自名为 Creating Globally Accessible User Defined Functions In ColdFusion (Safer Version)Ben Nadel's blog 条目

<cfcomponent output="false" hint="I define the application settings and event handlers.">

    <!--- Define the application. --->
    <cfset this.name = "TestApp" >
    <cfset this.applicationTimeout = createTimeSpan( 0, 0, 5, 0 ) >


    <!---
        Add all of our "global" methods to the URL scope. Since
        ColdFusion will automatically seach the URL scope for
        non-scoped variables, it will find our non-scoped method
        names.
    --->
    <cfset structAppend( url, createObject( "component", "udf.udf_library" ) ) >

</cfcomponent>

您现在应该可以全局访问MyFunction()

如果您想以UDF.MyFunction() 的身份访问该函数,那么我认为您应该可以将 Ben 的示例修改为以下内容:

<cfset UDF = StructNew() >
<cfset structAppend( UDF, createObject( "component", "udf.udf_library" ) ) >
<cfset structAppend( url, UDF ) >

【讨论】:

  • Micah,我确实读过 Ben 的博客。我也是很久以前读过的。那时它并不适用于我。这完美地回答了我的问题。这正是我所需要的。感谢您的帮助。我会把我完成的代码放在上面。
  • 探戈需要两个人。当我需要它时,您准确地向我介绍了该特定信息。那是很大的帮助!您使信息相关。这真是太棒了!另外,我已经每天都给道具了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
相关资源
最近更新 更多