如何在cfinvoke中引用coldfusion组件时遍历两个级别?

时间:2012-10-05 20:55:58

标签: coldfusion path parent cfc

如果我不想做任何映射,是否有另一种方法来调用组件中的方法,这是“两级”。像这样:

  service
     component_to_call.cfc
  mem
     pages
     handlers
        calling.cfc

这是我在calling.cfc内的电话:

  <cfinvoke 
    component="service.component_to_call"
    method="do_the"
    param1="#renderedResults#" 
    param2="#taskByName#" 
    returnvariable="tamperedCode">
    </cfinvoke>

会抛出无法找到service.component_to_call的错误。

Qustion:
如何调用父文件夹中的组件?

2 个答案:

答案 0 :(得分:3)

您可以在与调用CFC处于同一级别的Proxy.cfc中包含CFC级别的CFC,然后通过添加extends =“Proxy”作为调用CFC的属性来扩展Proxy.cfc。

示例Proxy.cfc

<cfcomponent name="Proxy">
<cfinclude template="../../service/component_to_call.cfc">
</cfcomponent>

调用cfc的示例

<cfcomponent name="calling" extends="Proxy">
</cfcomponent>

答案 1 :(得分:3)

为什么不想使用映射?这有点奇怪。

无论如何,只需直接浏览你想要实例化的CFC,它就会输出它自动生成的API文档,第一件事就是它的完整虚线路径。你可以用它。然而,这是绝对的,而不是相对的。

你不能做的是以某种方式指定一个可能与文件相关的路径(例如:“../../ fileInGrandparentDir.cfm”......用CFC路径不能这样做。

另一种方法是将一些CFC的祖先目录作为自定义标记路径,然后您可以通过文件名引用CFC,CF会找到它们。如果目录结构很复杂,那么这样做会带来性能损失。这就是说:不是很多的性能损失。

真的......你应该有一个映射到应用程序目录的顶层,然后使用映射来完全路径化CFC。我认为这就是通常的做法,也是最便于携带的方法。