首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问另一个cfc中的应用程序范围的cfc

访问另一个cfc中的应用程序范围的cfc
EN

Stack Overflow用户
提问于 2014-04-04 01:01:01
回答 1查看 144关注 0票数 1

我已经在applicationstart()的应用范围内放置了一个cfc。有没有办法在另一个cfc中访问它。

代码语言:javascript
运行
复制
 <cffunction name="method2" access="remote" returnType="Array" output="false">
    <cfinvoke component="application.cfc1" method="method1" returnVariable="result" />
<cfreturn result>
 </cffunction>

谢谢..

EN

回答 1

Stack Overflow用户

发布于 2014-04-04 03:26:29

有几种不同的方法可以做到这一点。亨利的建议奏效了。如果你想使用cfinvoke,你也可以这样做,但是你需要理解标签是如何工作的。

代码语言:javascript
运行
复制
<cfinvoke component="application.cfc1" ... /> 

您在这里使用的语法将字符串传递给组件属性,它将查找应用程序文件“//cfc1.cfc”,并尝试调用该组件上的方法。这大致等同于从Java类调用静态方法。它失败是因为您在该位置没有CFC文件。

如果您已经实例化了一个组件,那么您需要将变量传递给cfinvoke标记,而不是字符串文字。要做到这一点,简单的更改是在变量名周围添加散列。

代码语言:javascript
运行
复制
<cfinvoke component="#application.cfc1#" ... />

通常,这是所有ColdFusion标记的工作方式。如果您将一个值放入一个没有散列的属性中,那么您将为ColdFusion提供一个字符串文字值,而不是一个变量。要向标记提供变量,请将变量名括在散列中。

这有时会令人惊讶地强大,如果以不寻常的方式使用,也会造成混乱。例如,我非常确定这段代码可以工作,但应该避免:

代码语言:javascript
运行
复制
<cfset myvarname = "result" />
<cfinvoke returnVariable="#myvarname#" ... />

然后,从cfinvoke标记调用方法的结果将放在名为RESULT的本地变量中,因为这是提供给returnVariable属性的myvarname变量的值。

编辑:我想从下面的评论中添加澄清。当使用组件属性的字符串字面值调用cfinvoke时(上面的第一个示例),丹是正确的,为了调用该方法(ColdFusion中没有真正的静态方法),组件的一个实例被创建。如果您在循环中调用该方法或频繁调用它,这可能是不可取的(通常),因为您将创建许多完整的对象,然后ColdFusion服务器必须将这些对象存储在内存中,并且很快就会进行垃圾收集。不过,Henry也是正确的,如果您使用散列传递一个对象引用(上面的第二个示例),那么将使用现有的对象,而不是为每个调用创建一个新的实例,因此您不会有该性能问题。

话虽如此,我个人很少使用cfinvoke的主要原因是,与亨利推荐的方式调用相同的方法相比,大多数时候需要更多的击键。此外,我不确定我是否找到过一个真正令人信服的理由不使用实例化的对象,即使它只是一个实用程序类,我将它加载到我的依赖注入框架(ColdSpring、LightWire等)中,以便其他对象可以访问它。不过,在一些边缘情况下,我发现使用cfinvokeargument很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22844273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档