2013-07-18 43 views
2

假设我有一个项目,我在该项目中有几个CFC。为了举例,我有一个调试功能general.cfc,我想在mandrill.cfc中使用该功能,而不必将代码复制并粘贴到后者的cfc中。我已经搜索了这个,直到我可以不再谷歌,我知道我需要在这里发布。Coldfusion组件之间的调用函数

有人带我上学吗?

+0

不确定为什么有近距离投票。这不是一个非常复杂的问题,但它仍然是一个问题,在ColdFusion的背景下是有效的(我想知道投票结束的人甚至是CF用户吗?) –

+0

*我想知道投票结束的人是否甚至CF用户?*令人怀疑,因为这两个原因都不适用。问题很清楚,并不太宽泛。投票保留开放。 – Leigh

回答

0

我的解决办法是让mandrill.cfcextendgeneral.cfc组件:

<cfcomponent extends="general" name="mandrill" ...> 

参见CreateObject

+3

不同意。从组件的描述来看,Mandrill不是一般的,所以它不是它的一个子类。 –

+0

Matt Busche有个更好的主意。 –

6

这是我会怎么做

<cfset var objGeneral = createObject("component","general")> 

然后,如果你有一个函数general.cfc调用getName()你可以称它为objGeneral.getName()

+0

请记住范围! ''cfset var objGeneral = createObject(“component”,“general”)>'或''或' Honey

+0

”值得一提的是objGeneral可以在伪构造函数中设置(在函数定义之外,但是在''内),并在整个CFC中使用。 – Honey

+0

原始功能是关于使用功能。 ''会好些吗? –

2

您应该看看dependency injection的概念,并且您应该专门查看ColdSpring如何在ColdFusion(或DI/1)的上下文中实现它。

基本上你有一个init在Mandrill()的参数,它会采取General对象,然后设置General物体插入Mandrill对象的变量范围,通过使用variables.general它的方法。

这就是说,这对单身物体最有效。如果您需要在瞬态对象上执行此类操作,我只需在Mandrill代码(即:现在的Matt Busche建议)中根据需要实例化General对象。