1

如何让我在 application.cfc 中定义的映射在其他 cfcs 中的其他函数中工作?

即 this.mappings["plugins"] 在任何页面上都可以正常工作,但是如果我尝试实例化一个包含调用 this.mappings["plugins"] 的函数的 cfc - 它会失败。

谢谢

编辑:我不确定 - 这就是我想要做的:在 application.cfc 中:

this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';

在 stock.cfc 中:

<cfcomponent output="yes" > 
<cffunction name="showIndecies" access="public" output="yes" returntype="string">
<cfscript>
j = 1; 
variables.indeciesArray = ArrayNew(1); 
variables.indeciesFile = \
application.mappings["Plugins"]&'/StockMarketData/Data/indecies.csv'; 
</cfscript>
4

3 回答 3

3

我认为您将映射称为错误。在 application.cfc 中使用您的定义:

this.mappings["plugins"]

然后将由“插件”在其他代码中引用,因此:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">

HTH,如果没有在调用页面上发布您的代码。

于 2011-01-14T18:30:54.903 回答
1

除非 CF9 中的情况发生了变化,否则您在代码中的第一个错误是在每个映射名称的开头没有斜杠“/”来定义映射键。

您将映射定义为

this.mappings["plugins"] =

它应该是

this.mappings["/plugins"] =

注意结构键名称中的斜杠“/”。您必须以这种方式命名每个映射。

然后你会参考 Sam Farmer 在他的评论中提到的映射“

然后将由“插件”在其他代码中引用,因此:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">
于 2011-09-26T18:56:48.047 回答
1

在 Application.cfc 是其中之一的 CFC 中,“this”范围仅与该特定 CFC 相关。因此,当您在属于 Application.cfc 管辖范围的 CFM 页面中时,“this”范围适用于 Application.cfc,但在 CFC 中时,它适用于该特定 CFC。

也就是说,为什么需要直接访问映射结构?如果您想使用该映射来加载对象或包含文件,您可以执行<cfinclude template="/plugins/path/to/myfile" />or <cfset obj = createobject("component","plugins.path.to.my.cfc") />

您需要直接访问结构的用例是什么?你想修改它吗?

*编辑修复代码

于 2011-01-14T18:30:48.893 回答