【问题标题】:How to traverse two levels up when referencing a coldfusion component in a cfinvoke?在 cfinvoke 中引用冷融合组件时如何向上遍历两个级别?
【发布时间】:2012-10-05 20:55:57
【问题描述】:

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

  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 的错误。

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

【问题讨论】:

  • 为什么不想创建映射?
  • 您使用的是什么版本的 CF?这可能会影响您可以使用哪种代理技术。我相信在 CF 8 或更早版本中,我在回答中提到的技术实际上更清洁。您可以在 ColdFusion Cookbook coldfusioncookbook.com 中查看该示例
  • 使用coldfusion8。不要介意mappgins,但只能在下周重置服务器上的任何内容。所以我一直在寻找“周末解决方案”
  • 您知道您可以在 Application.cfc 中设置映射,是吗?您不需要在 CFAdmin 中执行此操作(实际上,我通常不会在 CFAdmin 中设置映射)。
  • @AdamCameron - 我想我有。我试图调用的文件夹正在使用另一个没有映射的 Application.cfc,而我的主要 Application.cfc(第二个是剩余的,仍未删除)包含一堆映射。我得到的错误是“在指定的路径找不到组件”

标签: coldfusion path parent cfc


【解决方案1】:

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

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

你不能做的是以某种方式指定一个相对路径,就像使用文件一样(例如:“../../fileInGrandparentDir.cfm”...不能用 CFC 路径做到这一点。

另一种方法是将两个 CFC 的祖先目录创建为自定义标记路径,然后您可以通过文件名引用 CFC,CF 会找到它们。如果目录结构很复杂,这样做会影响性能。也就是说:性能影响不大。

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

【讨论】:

  • 刚刚在上面评论过。实际上,我有一个到服务文件夹的映射,我一直在引用它。奇怪的是,下降了 2 个级别,它不再起作用了。不过,谢谢你的信息!一直很感激。
  • 你是如何指定映射的,它是如何体现这种“不工作”的? 你应该解决的问题,而不是解决它。我可以建议你开始另一个问题,我们可以看看@整理?
  • @AdamCameron,我也有兴趣查看映射修复,因为前段时间我遇到了同样的情况,这导致了我给出的解决方法。
  • @JamesRLamar:这不是我可以在这里记下的东西,但请看@这个 Gist:gist.github.com/3842591。如果您需要进一步的帮助,请在名单外联系我(联系方式在我的个人资料中)。
【解决方案2】:

您可以在与调用 CFC 处于同一级别的 Proxy.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>

【讨论】:

  • 我不知道。对我来说,该代码是“仅仅因为一个可以做某事并不意味着一个应该做某事”的一个例子。这似乎是错误的。里程有所不同。
  • 我也尽量避免这样做,但有时这正是我们所需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多