我有以下两个文件,并希望第二个扩展第一个:
但是,当我为第二个文件声明组件时,我不确定在 extends 属性中放什么。 我的问题是几个开发站点(具有共享的 SVN 存储库)正在运行相同的 ColdFusion 实例 ,所以我不能像这样在 CF 管理中创建一个映射:
<cfcomponent extends="site.application">
但是,ColdFusion 不喜欢:
<cfcomponent extends="..application">
或任何动态输入,如:
<cfcomponent extends="#expandpath('..').#application">
创建运行时映射( like here )似乎也不可能。在基本 application.cfc 中创建它是无用的,因为在声明继承 cfc 时该代码尚未执行;并且我无法在定义继承组件之前创建映射,因为还没有应用程序可以将其附加到。
有什么办法可以引用父目录来完成我的扩展吗?
编辑以澄清:由于上面的粗体文本,ApplicationProxy 解决方案不起作用。现在,作为一种解决方法,我们只是不将\dir\application.cfc 检入 SVN,以便每个开发人员都可以保留一个扩展他/她自己的根 application.cfc 的版本。显然,这并不理想。
最佳答案
以下代码对我有用。我注意到的一件事是 application.cfc 似乎被缓存了,所以对父应用程序 cfc 的更改可能不会反射(reflect)。我通过对子应用程序 cfc 进行微不足道的更改来解决这个问题。
<cfcomponent output="false">
<cfset variables.higherPath = ReReplace(GetMetaData(this).name,"\.[^\.]+\.[^\.]+$","") />
<cfset variables.extendApp = CreateObject("component", "#variables.higherPath#.Application") />
<cfloop item="variables.key" collection="#variables.extendApp#">
<cfif IsCustomFunction(variables.extendApp[variables.key])>
<cfset super[variables.key] = variables.extendApp[variables.key]>
<cfelse>
<cfset this[variables.key] = variables.extendApp[variables.key] >
</cfif>
</cfloop>
<cffunction name="onApplicationStart" output="false">
<cfset super.onApplicationStart() />
</cffunction>
关于coldfusion - 在子目录中扩展 application.cfc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/307423/